Rubí attr_accessor: nombre a: Nombre [] array
-
14-10-2019 - |
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]
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.