如何为数组创建一个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]
有帮助吗?

解决方案

只需使用一个指向数组的实例变量,然后从该实例变量制作登录器即可。

您的班级包括这样的东西:

attr_accessor :my_attr_accessor
def initialize
    @my_attr_accessor = []
end

请注意使用attr_accessor 将允许您更改变量的值。如果要确保数组保持停留,请使用 attr_reader 代替 attr_accessor. 。您仍然能够访问和设置数组元素并在数组上执行操作,但是您将无法用新值替换它并使用 += 为了串联行不通。

其他提示

如果您对始终存在的阵列可以, @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( [] ) 消灭它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top