我正在使用 Struct.new 动态创建新类(我们正在使用一些实体建模中间件,我想动态生成具体类型以进行序列化)。
本质上我有这个代码:
module A
def self.init_on(target)
target.foo = 123
end
end
$base_module = A
module Test
C = Struct.new(:id) do
include $base_module
@@base = $base_module
def initialize
@@base.init_on(self)
end
attr_accessor :foo
end
end
c = Test::C.new
puts c.foo
运行测试时出现此错误:
test2.rb:17:in initialize': uninitialized class variable @@base in Test::C (NameError)
from test2.rb:24:in
new' 来自 test2.rb:24:in `'
根据我对 Struct.new 的理解,该块是在正在创建的类的上下文中执行的,因此 @@base 应该是可解析的。
谢谢你的时间!
编辑:谢谢 - 我做了 init_on self.init_on 并使用了 class_variable_set 而不是 instance_variable_set。现在可以了!