Ruby Attr_accessor: Name zu: Name [] Array
-
14-10-2019 - |
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]
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.