En Ruby, à l'intérieur d'une méthode de classe, est une auto de la classe ou d'une instance?

Je sais que self est l'exemple à l'intérieur d'une méthode d'instance. Alors, est self la classe à l'intérieur d'une méthode de classe? E. g., Sera la suite des travaux dans les Rails?

class Post < ActiveRecord::Base
  def self.cool_post
    self.find_by_name("cool")
  end
end
  • Et pour ajouter à la ci-dessous les réponses, puisque ruby toujours évaluer le récepteur en soi, sauf si spécifié, votre code ci-dessus peut simplement appeler find_by_name sans l'auto 🙂
  • Merci, il y a des cas où il est une bonne idée de préciser self? Est self.find_by_name la première place Ruby serait à la recherche de find_by_name? Faut-il chercher ailleurs? Qu'en est dans le monde une méthode définie (une méthode définie dans le fichier à l'extérieur de la classe)?
  • Je l'ai testé. Il semble que l'ordre de priorité est la méthode de la classe et puis les globalement défini méthode si aucune méthode de classe est trouvé.
  • J'ai créé un diagramme de la méthode de recherche afin de Ruby. Vous trouverez peut-être utile.
  • Au moins en Ruby 1.9.2, ‘globalement défini " les méthodes sont en fait des méthodes privées sur Object. Essayez, par exemple: def foo; end; Object.private_methods.include?(:foo) # => true. Cela signifie qu'en gros, ils finissent au sommet de la chaîne d'héritage, et sont dernier afin d'être trouvé.
InformationsquelleAutor ma11hew28 | 2010-12-03