gpt4 book ai didi

ruby - 在 Struct.new block 中访问类变量

转载 作者:太空宇宙 更新时间:2023-11-03 16:59:32 26 4
gpt4 key购买 nike

我正在使用 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': Test::C 中未初始化的类变量@@base (NameError)
来自 test2.rb:24:in
new' 来自 test2.rb:24:in `'

根据我对 Struct.new 的理解,该 block 是在正在创建的类的上下文中执行的,因此 @@base 应该是可解析的。

感谢您的宝贵时间!

编辑:谢谢 - 我制作了 init_on self.init_on 并使用了 class_variable_set 而不是 instance_variable_set。现在可以使用了!

最佳答案

为什么不尝试使用像 self.instance_variable_set(:@@base, $base_module) 这样的东西。我认为这可能有效,因为您只是设置类对象的实例变量。

关于ruby - 在 Struct.new block 中访问类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4902490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com