我在學Ruby,最近發現了一些我不太明白的東西。在將模塊混入類中時,類對象無法訪問模塊實例方法。爲什麼類對象有權訪問內核模塊中的實例模塊?
module Swimmable
def swim
puts 'can swim'
end
end
class Fish
include Swimmable
end
Fish.swim
結果是undefined method 'swim' for Fish:Class (NoMethodError)
預計
然而,如果實例方法是內核模塊中定義的,我可以使用的類對象,實例對象訪問它。
module Kernel
def swim
puts 'can swim'
end
end
class Fish; end
Fish.swim # => can swim
Fish.new.swim # => can swim
是什麼讓類對象Fish
能夠訪問內核模塊中的實例方法?
如果您希望'Swimmable'對類對象可用,請在'Fish'中寫入'將Swimmable'擴展。這樣你就不需要在'Kernel'中定義模塊。更多閱讀搜索詞:_singleton class_ –