Ruby attr_accessor: nom: Array [nom]
-
14-10-2019 - |
Question
Comment puis-je créer un attr_accessor à tableau?
par exemple
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]
La solution
Il suffit d'utiliser une variable d'instance que les points à un tableau et faire un accesseur de cette variable d'instance.
Dans votre classe comprennent quelque chose comme ceci:
attr_accessor :my_attr_accessor
def initialize
@my_attr_accessor = []
end
Notez que usingattr_accessor
vous permettra de changer la valeur de la variable. Si vous voulez vous assurer que les séjours de tableau, utilisez attr_reader
en place de attr_accessor
. Vous serez toujours en mesure d'éléments d'accès et de tableaux ensemble et effectuer des opérations sur le tableau, mais vous ne serez pas en mesure de le remplacer par une nouvelle valeur et en utilisant +=
pour la concaténation ne fonctionnera pas.
Autres conseils
Si vous êtes OK avec le tableau existant toujours, la réponse de @ david4dev est bon. Si vous ne souhaitez que le tableau pour faire apparaître l'existence de la première utilisation, et ne veux plus jamais l'utilisateur d'être en mesure de le remplacer par un nouveau tableau (via la cession):
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'utilisateur peut encore appeler my_class.my_attr_accessor.replace( [] )
pour essuyer dehors.