Question

Je sais que certains disent que les variables de classe (par exemple @@class_var) devraient être éviter en Ruby et doivent utiliser la variable d'instance (par exemple @instance_var) dans le cadre de la classe à la place:

def MyClass
  @@foo = 'bar' # Should not do this.
  @foo = 'bar'  # Should do this.
end

Pourquoi l'utilisation des variables de classe désapprouvé dans Ruby?

Était-ce utile?

La solution

les variables de classe sont souvent décrié en raison de leur comportement parfois confusion en ce qui concerne l'héritage:

class Foo
  @@foo = 42

  def self.foo
    @@foo
  end
end

class Bar < Foo
  @@foo = 23
end

Foo.foo #=> 23
Bar.foo #=> 23

Si vous utilisez des variables d'instance de classe à la place, vous obtenez:

class Foo
  @foo = 42

  def self.foo
    @foo
  end
end

class Bar < Foo
  @foo = 23
end

Foo.foo #=> 42
Bar.foo #=> 23

Il est souvent plus utile.

Autres conseils

Attention; classe @@variables et @variables instance ne sont pas la même chose.

  

Pour l'essentiel, lorsque vous déclarez une classe   variable dans une classe de base, elle est partagée   avec toutes les sous-classes. Modification de la   valeur dans une sous-classe aura une incidence sur la   classe de base et toutes ses sous-classes   tout le long de l'arbre d'héritage.   Ce comportement est souvent exactement ce   voulu. Mais aussi souvent, ce   comportement n'est pas ce qu'envisageaient   le programmeur, et il conduit à des bogues,   surtout si le programmeur n'a pas   attendre à l'origine pour la classe à   par quelqu'un d'autre sous-classé.

De: http: // sporkmonger.com/2007/2/19/instance-variables-class-variables-and-inheritance-in-ruby

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