68 votes

variables statiques en rubis

Je viens d'apprendre sur les variables statiques en php. Y at-il quelque chose comme ça en rubis?

Par exemple, si nous voulons créer une classe Student et pour chaque objet student nous créons, son numéro d'identification doit être incrémenté automatiquement.

Je pensais que créer une variable de classe comme un statique va faire.

108voto

sepp2k Points 157757

Les variables de classe sont partagées entre toutes les instances (c'est pourquoi elles sont appelées variables de classe), elles feront donc ce que vous voulez. Ils sont également hérités, ce qui conduit parfois à un comportement plutôt déroutant, mais je ne pense pas que ce sera un problème ici. Voici un exemple de classe qui utilise une variable de classe pour compter le nombre d'instances qui ont été créées:

 class Foo
  @@foos = 0

  def initialize
    @@foos += 1
  end

  def self.number_of_foos
    @@foos
  end
end

Foo.new
Foo.new
Foo.number_of_foos #=> 2
 

14voto

SystematicFrank Points 3014

À l'aide de la accepté de répondre à la définition de la variable statique peut être dangereux, et c'est une erreur commune que j'ai vu dans beaucoup de code Ruby.

Quelque chose comme @@foos est partagé entre TOUS les sous-classes. Cependant, la plupart des programmeurs s'attendre à des variables statiques, à la portée seulement au sein de la classe où elles sont définies.

Si vous êtes à la recherche pour les variables statiques dans le sens de la plupart des langues, où leur champ d'application est uniquement de leur propre classe, regardez cette SORTE de réponse

Aussi ce blog est un bel exemple de la surprise, la plupart des programmeurs obtiendrez:

http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X