使用方法调用在attr_accessor中指定属性列表



我想创建大量的属性,如果用这样的方法调用来构建,这些属性可以很容易地完成,

 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 }

相关内容

  • 没有找到相关文章

最新更新