gpt4 book ai didi

ruby - 如何为动态实例变量设置 attr_accessor?

转载 作者:数据小太阳 更新时间:2023-10-29 06:25:29 24 4
gpt4 key购买 nike

我在我的类中动态创建了一个实例变量:

class Mine
attr_accessor :some_var

def intialize
@some_var = true
end

def my_number num
self.instance_variable_set "@my_#{num}", num
end
end

如何让 @my_#{num} 现在成为一个 attr 值?

例如我希望能够做到这一点:

dude = Mine.new
dude.my_number 1
dude.my_1
=> 1

最佳答案

这个答案不会污染类空间,例如.. 如果我执行 mine.my_number 4 那么 Mine 的其他实例将不会得到 my_4 方法.. 发生这种情况是因为我们使用对象的单例类而不是类。

class Mine
def my_number num
singleton_class.class_eval { attr_accessor "my_#{num}" }
send("my_#{num}=", num)
end
end

a = Mine.new
b = Mine.new
a.my_number 10 #=> 10
a.my_10 #=> 10
b.my_10 #=> NoMethodError

关于ruby - 如何为动态实例变量设置 attr_accessor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4964179/

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