我的印象是obj.method导致红宝石method如此寻找:
obj单身课.obj单例类所包含的模块.obj上课.obj班级所包含的模块method_missing原始对象obj.在这个模型下,搜索该方法的唯一单例类是原始接收器的单例类obj.但是,这个模型无法解释子类可以访问其超类的单例方法的事实.例如
class Foo
def self.foo
"foo"
end
end
class Bar < Foo
end
Bar.foo #=> "foo"
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为我相信这意味着Foo单身类在某些时候搜索了这个方法foo.但是,根据上面的模型,我希望只Bar搜索单例类foo.如果做不到这一点,我希望ruby可以查看Bar类,Class然后继续爬上超类链(Foo完全跳过它的单例类).
所以我的问题是:我对Ruby方法查找的理解缺少什么,这解释了一个类可以访问其超类的单例方法的事实?
子类化时,不仅Bar.superclass设置为Foo,而且对于单例类也是如此:
Bar.singleton_class.superclass == Foo.singleton_class # => true
Run Code Online (Sandbox Code Playgroud)
所以你真的不会感到困惑.实际的查找是:
obj单身课开始.method_missing| 归档时间: |
|
| 查看次数: |
573 次 |
| 最近记录: |