我想创建大量的属性,如果用这样的方法调用来构建,这些属性可以很容易地完成,
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
解释:
As attr_accessor是一个需要参数列表的方法调用。所以我们不能原样传递数组。(*)将数组转换为参数列表。
只需要定义一个类方法返回传递给attr_accessor的属性列表数组。
也可以很好地与attr_accessible(或任何类似的东西)一起工作。
这样做而不产生警告的一种方法是:
class MyClass
ATTR_LIST = [:x1, :y1, :x2, :y2]
attr_accessor(*ATTR_LIST)
end
接受的解决方案产生一个ruby警告:
'*'被解释为参数前缀
另一种方法是这样做:
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 }