ora*_*nge 5 ruby lookup module class eigenclass
让我们打开课程Module并为其添加一个方法:
class Module
def foo
puts "phew"
end
end
Run Code Online (Sandbox Code Playgroud)
我可以通过这样做来调用这个方法,
Class.foo
Run Code Online (Sandbox Code Playgroud)
这是可以理解的,因为Class是Class超类的类Module.所以它可以调用中定义的实例方法Module.

现在,bar下面的方法是在Module'eigenclass 上定义的:
class Module
def self.bar
puts "bar"
end
end
Run Code Online (Sandbox Code Playgroud)
但现在
Class.bar
Run Code Online (Sandbox Code Playgroud)
也有效.
有人可以解释一下如何在特征类Class中访问方法Module吗?
我想我现在明白了.方法查找不像我之前解释的那样工作.当我这样做的时候Class.foo,这个方法是在特征Class类中进行搜索,然后是超类,它是本Module征类的特征类,直到它的特征类BasicObject,此时它会转向自身(就像蛇吃它自己的尾巴)来寻找方法Class(就像'eigenclass Class的超类BasicObject一样)然后到它的超类Module,它找到了方法.
类似地,当我这样做时Class.bar,方法在Class's eigenclass中搜索,然后在Module它找到它的本征类中搜索.
当我做
class Class
def check
puts "class instance method"
end
end
Run Code Online (Sandbox Code Playgroud)
和
class Module
def self.check
puts "modules eigenclass method"
end
def check
puts "module instance method"
end
end
Run Code Online (Sandbox Code Playgroud)
当我做的时候猜猜是输出:
Class.check
Run Code Online (Sandbox Code Playgroud)
这是我目前的理解:
