让我们打开类Module
,并添加一个方法吧:类,模块,其eigenclasses和方法查找
class Module
def foo
puts "phew"
end
end
我可以这样调用这个方法,
Class.foo
这是可以理解因为Class
的等级是Class
,其超类是Module
。因此它可以调用在Module
中定义的实例方法。现在
,下面的方法bar
定义上Module
的eigenclass:
class Module
def self.bar
puts "bar"
end
end
但现在
Class.bar
也适用。
有人能解释我如何Class
可以访问Module
的本征类中的方法吗?
我想我现在明白了。以前我解释过的方法查找不起作用。当我做Class.foo
时,该方法在的本征类中搜索,然后它是超类,它是Module
的本征类一直到BasicObject
的本征类,在此时它转向自身(如同吃蛇的尾巴一样的蛇)以查看对于Class
中的方法(因为Class
是BasicObject
的本征类的超类),然后是它的超类Module
,在那里它找到了该方法。
类似地,当我做Class.bar
,方法中搜索Class
的eigenclass然后在Module
的eigenclass它发现它。
当我做
class Class
def check
puts "class instance method"
end
end
和
class Module
def self.check
puts "modules eigenclass method"
end
def check
puts "module instance method"
end
end
猜测WOT是输出,当我做:
Class.check
这是我目前的理解:
相关讨论我发现有帮助:https:// stackoverflow。com/questions/13269271/why-a-modules-singleton-method-is-not-visible-in-downstream-eigenclasses- – 2016-02-17 16:00:59