類單方法方法查找我的印象是,obj.method
造成紅寶石尋找method
正是如此:使用Ruby
- 查找範圍
obj
的單例類。 - 查看
obj
的單例類包含的模塊。 - 看看
obj
的班級。 - 照照模塊通過
obj
的類 - 重複,直到發現
- 如果沒有找到,打電話
method_missing
原始對象上,obj
在類的超步驟3和4包括在內。
在這種模式下,所述僅單例類關注的方法是單例類原接收機,obj
的。然而,這個模型不能解釋一個事實,即一個子類可以訪問它的超類的單例方法。例如
class Foo
def self.foo
"foo"
end
end
class Bar < Foo
end
Bar.foo #=> "foo"
我很困惑,因爲我相信,這意味着Foo
的單例類是在一些點搜索的方法foo
。但是,在上面的模型中,我預計只有Bar
的單身人員課程將被搜索foo
。否則,我希望紅寶石看Bar
的類,Class
,然後繼續爬取超類鏈(完全跳過Foo
及其單例類)。
所以我的問題:我對Ruby方法查找的理解中缺少什麼,它解釋了一個類可以訪問其超類的單例方法的事實?
下面的問題有一個詳細的答案,可能也有幫助:http://stackoverflow.com/questions/23848667/ruby-method-lookup-path-for-an-object – Powers 2014-05-25 06:22:47