Ruby on Rails díl.21, Ruby - Třídy III.

Napsal (») 7. 4. 2007 v kategorii Programování, přečteno: 1569×
obrazky/rubyonrailsn.pngIdeální webhosting pro Ruby on Rails je banan.cz.

Definice viditelnosti


Standardně, všechny metody v třídách Ruby jsou public - přístupné komukoliv. Jestli je to požadované, tento přístup může být omezen na public, private, protected objektovými metodami. Je zajímavé že toto nejsou ve skutečnosti klíčová slova, ale vlastně metody které operují na třídě, dynamicky měnící viditelnost metod.

Private


Jednoduchý příklad:

class Priklad
def metoda1
end

private # vsechny metody ktere nasleduji jsou private: nepristupne pro vnejsi objekty

def metoda2
end
end


Jestli je private metoda volána bez argumentů, to nastavuje přístup k private metodě pro všechny následující metody. Může být také volána s jmennými argumenty.

Příklad pojmenované private metody:

class Ukazka
def metoda1
end

def metoda2
end

private :metoda2
end


Zde byl private volán s argumentem, k provedení změn viditelnosti metoda2 na privátní.

Všimněte si pro třídní metody (ty které jsou deklarované pomocí def JmenoTridy.jmeno_metody), potřebujete použít další funkci: private_class_method

Běžné pouřití private_class_method je k vytvoření "nové" metody (kontruktoru).

Typický příklad implementace:(Singleton)

class Singleton
private_class_method :new

def Singleton.create(*args, &blok)
@@inst = new(*args, &blok) unless @@inst
return @@inst
end
end


Sečteno a podtrženo v C++, "privátní" míní "privátní k této třídě", zatímco v Ruby tom znamená "privátní k této instanci". Co toto znamená, v C++ z kódu v třídě A, můžete zpřístupnit nějakou privátní metodu jinému objektu typu A. V Ruby, nemůžete. Můžete výhradní přistupovat k privátním metodám pro váši instanci objektu, a ne pro jiný objekt příklad (třídy A).

V Ruby se držíme rčení:

"soukromému vlastnictví nemůžete specifikovat příjemce".

To jestli metoda je privátní, ve vašem kódu můžete říct takto:

class PristupPrivate
def a
end
private :a # a je privatni metoda

def pristup private
a # Jasne!
self.a # Jasne! stejne jako u predchoziho prikladu
jiny_objekt.a # Ani za nic, a je private, nemuzete ji takto zavolat (ale pokud by byla protected, tak muzete!)
end
end


Zde, "jiny_objekt" je "přijímač" a metoda "a" je volána. Pro private metody, to nefunguje. Ať tak nebo onak, to je to, co nám "protected" viditelnost dovolí.
Štítky: Ruby on Rails
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel pět a šest