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]
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top