我目前有两个类,每个类都扩展了一个不同的模块:
class Example1
def initialize
extend TopModule:SubModule1
end
end
class Example2
def initialize
extend TopModule:SubModule2
end
end
不是每个类都扩展了两个类,而是可以创建一个类,然后在对象级别扩展该模块?
我已经添加了模块的名称,并将其传递给对象的构造函数,但抱怨代码。
class Example
def initialize (module)
self.send("extend TopModule::#{module}"
end
end
object = Example.new('Submodule1')
NoMethodError:
undefined method `extend TopModule::SubModule1' for #<Example:0x00000000057c8198>
总体问题:假设我有N个对象(它们都应来自同一类,但每个对象必须具有自己的模块)。具有此功能的最佳方法是什么?
答案 0 :(得分:4)
更新后的答案!
module TopModule
module SubModule1
def hello
puts "Hello from #1"
end
end
end
module TopModule
module SubModule2
def hello
puts "Hello from #2"
end
end
end
class Example
def initialize(mod)
extend TopModule.const_get(mod)
end
end
Example.new("SubModule1").hello
# => Hello from #1
Example.new("SubModule2").hello
# => Hello from #2
答案 1 :(得分:0)
您可能走错了路,这迫使您找到“不良”解决方案。 But here it is.
class Example
def initialize m
self.instance_eval("extend Topmodule::#{m}")
end
end