edelim açık sınıf Module
ve buna bir yöntemini ekleyin: Bunu yaparak bu yöntemi çağırabilirsinizSınıf, Modül, onların eigenclasses ve yöntem arama
class Module
def foo
puts "phew"
end
end
,
Class.foo
anlaşılabilir Çünkü Class
sınıfı, üst sınıfı Module
olan Class
10'dur. böylece Module
'da tanımlanan örnek yöntemlerini çağırabilir.
Şimdi, yöntem aşağıda bar
Module
'ın eigenclass tanımlanır:
class Module
def self.bar
puts "bar"
end
end
ama şimdi
Class.bar
da çalışır.
Birisi bana Module
adlı kişinin eigenclass yöntemindeki yöntemlere nasıl erişebileceğini açıklayabilir mi?
Sanırım şimdi anladım. Metot bak, daha önce açıkladığım şekilde çalışmıyor. Class.foo
yaptığımda, yöntem Class
's eigenclass içinde aranır ve daha sonra Module
' in eigenclass olan BasicObject
's eigenclass kadar kendi noktası (kendi kuyruğunu yediği bir yılan gibi) kendi başına dönecek şekilde eigenclass Class
yönteminde (Class
, BasicObject
'un eigenclass'ın üst sınıfıdır) ve daha sonra, yöntemi bulduğu üst sınıf Module
.
Benzer şekilde, Class.bar
yaptığımda, yöntem Class
adlı kişinin eigenclass'ında ve daha sonra Module
'un bulduğu eigenclass içinde aranır.
Ben
class Class
def check
puts "class instance method"
end
end
ve
class Module
def self.check
puts "modules eigenclass method"
end
def check
puts "module instance method"
end
end
tahminim wot yaptığınızda yaptığımda çıktısı:
Class.check
Bu benim şimdiki anlayış:
İlgili tartışma Yararlı oldu: https: // stackoverflow.com/questions/13269271/why-a-modules-singleton-method-in-not-in-not-akım-eigenclasses-nerede –