Rubino attr_accessor: nome: nome [] array
-
14-10-2019 - |
Domanda
Come faccio a creare un attr_accessor di array?
per esempio
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]
Soluzione
Basta usare una variabile di istanza che punta a un array e fare una funzione di accesso da quella variabile istanza.
All'interno della vostra classe di includere qualcosa di simile:
attr_accessor :my_attr_accessor
def initialize
@my_attr_accessor = []
end
Si noti che usingattr_accessor
vi permetterà di cambiare il valore della variabile. Se si vuole garantire che i soggiorni matrice, utilizzare attr_reader
al posto di attr_accessor
. Sarà ancora in grado di accedere e di matrice insieme elementi ed eseguire operazioni su matrice, ma non sarà in grado di sostituirlo con un nuovo valore e l'utilizzo +=
per la concatenazione non funzionerà.
Altri suggerimenti
Se sei OK con l'Array sempre esistente, di @ david4dev risposta è buona. Se solo si desidera la matrice al pop in esistenza al primo utilizzo, e non desidera che l'utente sia in grado di sostituirlo con un nuovo array (tramite assegnazione):
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
L'utente potrebbe ancora chiamare my_class.my_attr_accessor.replace( [] )
per spazzarla via.