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您仍然可以访问和设置数组元素并对数组执行操作,但您将无法将其替换为新值,并且使用+=for 连接将不起作用。

于 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 回答