我有一个名称和值列表,我正在尝试读取并转换为类,因此我正在使用Class.new
.
我想要的最终结果是许多类的工作方式就像定义一样:
module MyMod
class AA < Base
def self.value
value1
end
end
class AB < Base
def self.value
value2
end
end
...
end
我当前的代码如下所示:
name = 'AA'
value = 'test'
MyMod.const_set name, Class.new(Base) do
???
end
设置名称效果很好,但还没有弄清楚我在块中需要什么才能value
进入。调用def
不起作用,因为闭包value
丢失了。
我设法让事情与:
temp = const_set name, Class.new(Base)
temp.define_singleton_method(:value) { value }
但是,似乎应该有一种方法可以使用Class.new
. 另外,我真的不确定define_singleton_method
是否将方法放在正确的位置。它在我的测试中有效,但我不确定该方法是否真的在我认为的位置或调用链上的其他位置。我尝试了class_variable_set
, attr_reader
, class_eval
,instance_eval
和其他的各种组合,但它到了只能猜测和检查的地步。我想我还没有完全理解元编程:-/