Frage

Wie würde ich einen Attr_Accessor für Array erstellen?

zum Beispiel

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]
War es hilfreich?

Lösung

Verwenden Sie einfach eine Instanzvariable, die auf ein Array verweist, und machen Sie einen Accessor aus dieser Instanzvariablen.

In Ihrer Klasse enthält so etwas:

attr_accessor :my_attr_accessor
def initialize
    @my_attr_accessor = []
end

Beachten Sie, dass die Verwendung vonattr_accessor Ermöglicht Ihnen, den Wert der Variablen zu ändern. Wenn Sie sicherstellen möchten, dass das Array bleibt, verwenden Sie attr_reader anstelle von attr_accessor. Sie können weiterhin auf Arrayelemente zugreifen und festlegen und Vorgänge im Array ausführen, aber Sie werden es jedoch nicht durch einen neuen Wert und verwenden += Für die Verkettung wird nicht funktionieren.

Andere Tipps

Wenn Sie mit dem Array immer in Ordnung sind, ist die Antwort von @David4Dev gut. Wenn Sie nur möchten, dass das Array bei der ersten Verwendung existiert und niemals möchte, dass der Benutzer es durch ein neues Array ersetzen kann (per Zuordnung):

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

Der Benutzer konnte noch anrufen my_class.my_attr_accessor.replace( [] ) um es auszulöschen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top