333 votes

Ruby: Méthode de classe d'appel de l'instance

En Ruby, Comment appelez-vous une méthode de classe de l’une des instances de cette classe ? Dire que j’ai

la ligne récupère la valeur par défaut. Mais y a-t-il une manière de le dire sans parler de ? Il semble qu’il devrait y avoir.

545voto

Mark Rushakoff Points 97350

Plutôt que de se référant au nom littéral de la classe, à l’intérieur d’une méthode d’instance vous pouvez simplement appeler `` .

Sorties :

 Méthode de classe : Foo méthode d’Instance : Foo 

181voto

Mark B Points 699

Utiliser self.class.blah n'est PAS la même chose que d'utiliser ClassName.blah quand il s'agit de l'héritage.

 class Truck
  def self.default_make
    "mac"
  end

  def make1
    self.class.default_make
  end

  def make2
    Truck.default_make
  end
end


class BigTruck < Truck
  def self.default_make
    "bigmac"
  end
end

ruby-1.9.3-p0 :021 > b=BigTruck.new
 => #<BigTruck:0x0000000307f348> 
ruby-1.9.3-p0 :022 > b.make1
 => "bigmac" 
ruby-1.9.3-p0 :023 > b.make2
 => "mac" 
 

14voto

Harish Shetty Points 38877

Pour accéder à une méthode de classe à l’intérieur d’une méthode d’instance, procédez comme suit :

Voici une solution de rechange pour votre problème :

Maintenant nous allons utiliser notre classe :

6voto

yfeldblum Points 42613
self.class.default_make

5voto

Maha Points 610

Vous faites la bonne façon. Méthodes de la classe (similaires aux méthodes « statiques » en C++ ou Java) ne sont pas partie de l’instance, afin qu’ils aient à être référencés directement.

Sur cette note, dans votre exemple vous seraient mieux servis en « default_make » une méthode normale :

Méthodes de la classe sont plus utiles pour des fonctions de service public-type qui utilisent la classe. Par exemple :

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