让我们打开类Module
并为其添加一个方法:
class Module
def foo
puts "phew"
end
end
我可以通过这样做来调用这个方法,
Class.foo
这是可以理解的,因为 class of Class
is Class
,其超类 is Module
。所以它可以调用定义在Module
.
现在,bar
下面的方法是在 的特征类上定义Module
的:
class Module
def self.bar
puts "bar"
end
end
但现在
Class.bar
也有效。
有人可以解释一下如何Class
访问Module
eigenclass 中的方法吗?
我想我现在明白了。方法查找不像我之前解释的那样工作。当我这样做时Class.foo
,该方法在Class
的 eigenclass 中搜索,然后它是超类,它是Module
eigenclass 一直到BasicObject
的 eigenclass,此时它会转向自身(就像一条蛇吃自己的尾巴)以在Class
(的eigenclass)Class
的超类也是BasicObject
如此,然后是它的 superclass Module
,它在那里找到方法。
同样,当我这样做时Class.bar
,方法会在 ' 的 eigenclass 中搜索Class
,然后在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
这是我目前的理解: