Singleton 類的訊息傳播
例項永遠不會包含只攜帶資料的方法。但是,我們可以為任何物件定義單例類,包括類的例項。
當一個訊息傳遞給一個物件(方法被呼叫)時,Ruby 首先檢查是否為該物件定義了一個單獨的類,以及它是否可以回覆該訊息,否則 Ruby 會檢查例項的類’祖先鏈並對其進行處理。
class Example
def foo
:example
end
end
Example.new.foo #=> :example
module PrependedModule
def foo
:prepend
end
end
class Example
prepend PrependedModule
end
Example.ancestors #=> [Prepended, Example, Object, Kernel, BasicObject]
e = Example.new
e.foo #=> :prepended
def e.foo
:singleton
end
e.foo #=> :singleton