Ruby:通过循环数组定义属性?

时间:2010-01-20 23:21:02

标签: ruby

我正在尝试从数组中定义属性,如下所示:

["a", "b", "c"].each do |field|
  @recipe.field = "anything"
end

我想结束这样的事情:

@store.a = "anything"
@store.b = "anything"
@store.c = "anything"

你知道我应该对上面的@store。字段做些什么吗?我试过@ store.send(字段),但这对我不起作用,我不知道要搜索哪些关键字来找到上面的解决方案。非常感谢任何帮助。

2 个答案:

答案 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