とattr_accessorに属性リストを指定します。これを達成する他の方法はありますか?はこれが動作しない</p> <pre><code>attr_accessor :attr_list def attr_list [:x1, :y1, :x2, :y2] end </code></pre> <p>、私はこのようなメソッド呼び出しで構築あれば容易に行うことができる多数の属性を作成したいメソッド呼び出し
ご協力いただければ幸いです。
とattr_accessorに属性リストを指定します。これを達成する他の方法はありますか?はこれが動作しない</p> <pre><code>attr_accessor :attr_list def attr_list [:x1, :y1, :x2, :y2] end </code></pre> <p>、私はこのようなメソッド呼び出しで構築あれば容易に行うことができる多数の属性を作成したいメソッド呼び出し
ご協力いただければ幸いです。
は、
def self.attr_list
[:x1, :y1, :x2, :y2]
end
attr_accessor *attr_list
説明それを考え出した:
としてattr_accessorをパラメータリストを期待するメソッド呼び出しです。したがって、そのまま配列を渡すことはできません。 (*)は、配列をパラメータリストに変換します。
attr_accessorに渡される属性リストの配列を返すクラスメソッドを定義する必要があります。
attr_accessible(またはそれに類するもの)と同様に機能します。
受け入れソリューションは、ルビーの警告生成:
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 }
警告を表示せずにこれを行う方法:
class MyClass
ATTR_LIST = [:x1, :y1, :x2, :y2]
attr_accessor(*ATTR_LIST)
end
ありがとう –