我在这方面读了很多答案,但我仍然无法理解为什么以下内容不起作用。
module A
def a
puts 'hi'
end
end
module B
extend A
end
class C
extend B
def b
a
end
end
C.new.b # undefined local variable or method `a' for #<C:...
我也尝试过以下方法:
module B
def self.included(recipient)
recipient.extend A
end
end
希望
C
能够得到扩展(但我猜等级结构就错了)。重要提示:问题在于我有一个需要通过
扩展
(memoist)的模块,并且我想为它添加一些功能。我该如何实现这一点,为什么第一个示例不起作用?
extend
时,它将创建类方法而不是实例方法。虽然您也可以通过使用一些额外的魔法来使用include
创建类方法,这种方法是通过included
方法来扩展目标类的嵌套模块,按照惯例称为ClassMethods
。 - Kris