0

配列へのattr_accessorを作成するにはどうすればよいですか?

例えば

class MyClass

  attr_accessor :my_attr_accessor

  def initialize()
  end

  def add_new_value(new_array)
    @my_attr_accessor += new_array
    return @my_attr_accessor
  end

end

my_class = MyClass.new
my_class.my_attr_accessor = 1
my_class.my_attr_accessor[1] = 2
my_class.my_attr_accessor.push = 3
my_class.add_new_value(5)

my_class.my_attr_accessor
=> [1, 2, 3, 5]
4

2 に答える 2

3

配列を指すインスタンス変数を使用して、そのインスタンス変数からアクセサーを作成するだけです。

クラス内に次のようなものを含めます。

attr_accessor :my_attr_accessor
def initialize
    @my_attr_accessor = []
end

attr_accessorを使用すると、変数の値を変更できることに注意してください。配列を確実に維持したい場合はattr_reader、の代わりにを使用してattr_accessorください。配列要素にアクセスして設定し、配列に対して操作を実行することはできますが、新しい値に置き換えることはできず+=、連結に使用することはできません。

于 2011-01-02T14:27:25.040 に答える
1

アレイが常に存在していても問題がない場合は、@david4devの答えが適切です。アレイを最初の使用時にのみ存在させ、ユーザーがそれを新しいアレイに(割り当てを介して)置き換えることができないようにする場合:

class MyClass
  def my_attr_accessor
    @my_attr_accessor ||= []
  end
  def add_new_value( value )
    my_attr_accessor << value
  end
  def add_new_values( values_array )
    my_attr_accessor.concat values_array
  end
end

ユーザーはそれでもmy_class.my_attr_accessor.replace( [] )それを一掃するために呼び出すことができます。

于 2011-01-02T14:31:07.663 に答える