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]
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top