このようにメソッド呼び出しで構築すれば簡単にできる属性を大量に作成したいのですが、
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 (または同様のもの) でもうまく機能します。
警告を発生させずにこれを行う 1 つの方法:
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 }