我正在尝试从数组中定义属性,如下所示:
["a", "b", "c"].each do |field|
@recipe.field = "anything"
end
我想结束这样的事情:
@store.a = "anything"
@store.b = "anything"
@store.c = "anything"
你知道我应该对上面的@store。字段做些什么吗?我试过@ store.send(字段),但这对我不起作用,我不知道要搜索哪些关键字来找到上面的解决方案。非常感谢任何帮助。
答案 0 :(得分:4)
属性a
的setter方法称为a=
,因此您可以使用带有参数send
的{{1}}来调用setter方法:
"a="
答案 1 :(得分:1)
如果要向类动态添加属性,则应使用attr_accessor
mthod(或检查它的作用
class Recipe
attr_accessor *["a", "b", "c"]
end
["a", "b", "c"].each do |field|
@recipe.send("#{field}=", "anything")
end
编辑:
如您在示例中所示,如果您要为def attr=
方法定义的字段分配内容,则需要使用send
参数调用"attr=", value
。