我想创建大量属性,如果使用这样的方法调用构建这些属性,可以轻松完成,
attr_accessor :attr_list
def attr_list
[:x1, :y1, :x2, :y2]
end
这是行不通的。有没有其他方法可以实现这一目标?
任何帮助将不胜感激。
我想创建大量属性,如果使用这样的方法调用构建这些属性,可以轻松完成,
attr_accessor :attr_list
def attr_list
[:x1, :y1, :x2, :y2]
end
这是行不通的。有没有其他方法可以实现这一目标?
任何帮助将不胜感激。
弄清楚了,
def self.attr_list
[:x1, :y1, :x2, :y2]
end
attr_accessor *attr_list
解释:
由于 attr_accessor是一个需要参数列表的方法调用。所以我们不能按原样传递数组。( * ) 将数组转换为参数列表。
只需要定义一个类方法返回传递给 attr_accessor 的属性列表数组。
也适用于 attr_accessible(或任何类似的东西)。
在不引起警告的情况下执行此操作的一种方法:
class MyClass
ATTR_LIST = [:x1, :y1, :x2, :y2]
attr_accessor(*ATTR_LIST)
end
接受的解决方案会产生一个红宝石警告:
'*' 解释为参数前缀
另一种方法是做这样的事情:
def attr_list
[:x1, :y1, :x2, :y2]
end
attr_list.each { |attr| attr_accessor attr }
或者
ATTR_LIST = [:x1, :y1, :x2, :y2]
ATTR_LIST.each { |attr| attr_accessor attr }