9

このようにメソッド呼び出しで構築すれば簡単にできる属性を大量に作成したいのですが、

 attr_accessor :attr_list 

 def attr_list
   [:x1, :y1, :x2, :y2]   
 end

これは機能していません。これを達成する他の方法はありますか?

どんな助けでも大歓迎です。

4

3 に答える 3

16

理解した、

def self.attr_list
 [:x1, :y1, :x2, :y2]   
end

attr_accessor *attr_list 

説明:

attr_accessor は、パラメーター リストを必要とするメソッド呼び出しです。そのため、配列をそのまま渡すことはできません。( * ) は、配列をパラメーター リストに変換します。

attr_accessor に渡された属性リストの配列を返すクラス メソッドを定義するだけです。

attr_accessible (または同様のもの) でもうまく機能します。

于 2013-06-12T18:08:01.467 に答える
4

警告を発生させずにこれを行う 1 つの方法:

class MyClass
    ATTR_LIST = [:x1, :y1, :x2, :y2]
    attr_accessor(*ATTR_LIST)
end
于 2016-01-26T23:46:11.250 に答える
3

受け入れられた解決策では、ルビーの警告が生成されます。

'*' は引数プレフィックスとして解釈されます

別の方法は、次のようにすることです。

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 }
于 2015-02-25T01:05:24.660 に答える