我正在尝试定义几个模块,以便轻松地将一些实例和类方法添加到其他类中,这就是我正在做的事情:
module Foo
module Bar
def speak
puts "hey there"
end
end
module Baz
extend Foo::Bar
def welcome
puts "welcome, this is an instance method"
end
end
end
class Talker
include Foo::Baz
end
Talker.new.welcome
Talker.speak
Run Code Online (Sandbox Code Playgroud)
这个输出是:
welcome, this is an instance method
undefined method 'speak' for Talker.class (NoMethodError)
Run Code Online (Sandbox Code Playgroud)
我期待Talker拥有'speak'方法,因为它包括Foo :: Baz,它本身扩展了Foo :: Bar.
我错过了什么?
Via*_*kov 21
你可以试试这个:
module Baz
extend Foo::Bar
def self.included(base)
base.send :extend, Foo::Bar
end
def welcome
puts "welcome, this is an instance method"
end
end
Run Code Online (Sandbox Code Playgroud)
这将自动扩展包含Baz的所有类.
PS:
extend Foo::Bar在module Baz原始片段中,此代码不会影响方法def self.included(base).