Örnek yöntemleri bir sınıf tanımlama bloğu içinde tanımlanır. Sınıf yöntemleri, bir sınıfın tek sınıfında tekil yöntemler olarak tanımlanır ve gayri resmi olarak "metaclass" veya "eigenclass" olarak da bilinir. private
bir anahtar kelime değil, bir yöntemdir ( Modül # özel ).
Bu yönteme yapılan bir çağrıdır self#private
/ A#private
aksi toggled kadar tüm önümüzdeki Örnek yöntemi tanımları için özel erişim "geçiş yapar":
class A
private
def instance_method_1; end
def instance_method_2; end
# .. and so forth
end
Daha önce belirtildiği gibi, sınıf yöntemleri gerçekten singleton sınıfında tanımlanan singleton yöntemleridir.
def A.class_method; end
Veya anonim, singleton A sınıfının tanım gövdesini açmak için özel bir sözdizimi kullanarak:
class << A
def class_method; end
end
"Message private" alıcısı - kendi içinde - class A
sınıf nesnesi A'dır. class << A
Bloğun içindeki öz başka bir nesnedir, singleton sınıfıdır.
Aşağıdaki örnek gerçekte, arama için iki farklı alıcı veya hedef kullanan özel adında iki farklı yöntem çağırmaktadır. İlk bölümde, özel bir örnek yöntemi ("A sınıfı üzerinde"), ikincisinde ise özel bir sınıf yöntemi tanımlarız (aslında A'nın singleton sınıfı nesnesinde tekil bir yöntemdir).
class A
# self is A and private call "A.private()"
private def instance_method; end
class << self
# self is A's singleton class and private call "A.singleton_class.private()"
private def class_method; end
end
end
Şimdi, bu örneği biraz yeniden yazın:
class A
private
def self.class_method; end
end
[Ruby dil tasarımcılarının] yaptığı hatayı görebiliyor musunuz? A'nın yaklaşan tüm örnek yöntemleri için özel erişime geçersiniz, ancak farklı bir sınıf olan singleton sınıfında tekli bir yöntem bildirmeye devam edersiniz.