Pregunta

¿Cómo puedo crear una attr_accessor a la matriz?

por ejemplo

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]
¿Fue útil?

Solución

Sólo tiene que usar una variable de instancia que los puntos a una matriz y crea un descriptor de acceso de esa variable de instancia.

Dentro de la clase de incluir algo como esto:

attr_accessor :my_attr_accessor
def initialize
    @my_attr_accessor = []
end

Tenga en cuenta que usingattr_accessor le permitirá cambiar el valor de la variable. Si desea asegurarse de que las estancias matriz, utilice attr_reader en lugar de attr_accessor. Usted todavía será capaz de elementos de acceso y la matriz de conjuntos y realizar operaciones en la matriz, pero usted no será capaz de sustituirlo por un nuevo valor y el uso de += para la concatenación no funcionará.

Otros consejos

Si estás bien con la matriz siempre existente, la respuesta de @ david4dev es buena. Si sólo desea la matriz para que aparezca a la existencia en el primer uso, y nunca quiere que el usuario sea capaz de sustituirla por una nueva matriz (a través de la asignación):

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

El usuario todavía podría llamar my_class.my_attr_accessor.replace( [] ) hacerla desaparecer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top