Otwórzmy klasa Module
i dodać metodę do niego:klasa, moduł, ich eigenclasses oraz metody lookup
class Module
def foo
puts "phew"
end
end
mogę wywołać tę metodę w ten sposób,
Class.foo
co jest zrozumiałe ponieważ klasa Class
to Class
, której nadklasa to Module
. więc może wywoływać metody instancji zdefiniowane w Module
.
Teraz metoda bar
poniżej określono na eigenclass Module
„s:
class Module
def self.bar
puts "bar"
end
end
ale teraz
Class.bar
również działa.
Czy ktoś może mi wyjaśnić, w jaki sposób Class
może uzyskać dostęp do metod w eigenclass Module
?
Myślę, że mam to teraz. Wyszukiwanie metod nie działa w sposób opisany wcześniej. kiedy robię Class.foo
, metoda jest przeszukiwana w Class
's eigenclass, a następnie jest superklasą, która jest Module
' s eigenclass całą drogę aż do BasicObject
's eigenclass w którym momencie się zwraca (jak wąż jedząc własny ogon), aby wyglądać dla metody w Class
(jako Class
jest nadklasą z eigenclass BasicObject
), a następnie do jej nadklasy Module
, gdzie znajduje metodę.
Podobnie, kiedy nie Class.bar
, sposób poszukuje się Class
jest eigenclass, a następnie w Module
's eigenclass w którym się ona znajduje.
Kiedy zrobić
class Class
def check
puts "class instance method"
end
end
i
class Module
def self.check
puts "modules eigenclass method"
end
def check
puts "module instance method"
end
end
domysły wot jest wyjście, gdy zrobić:
Class.check
To jest moje obecne rozumienie:
Powiązana dyskusja Znalazłem pomocny: https: // stackoverflow.com/questions/13269271/why-a-modules-singleton-method-is-not-visible-in-downstream-eigenclasses-where –