3 votes

Quelles sont les règles pour `self` dans une méthode de niveau supérieur ?

Si je définis une méthode de premier niveau dans un fichier Ruby, la valeur du paramètre self semble dépendre fortement de la personne qui l'appelle.

def who_am_i
  puts self.inspect
end

class A
  def self.foo
    who_am_i
  end
  def foo
    who_am_i
  end
end

def foo
  who_am_i
end

foo       # >> main
A.foo     # >> A
A.new.foo # >> #<A:...>

Évidemment, si une méthode est définie sur une classe, self sera soit la classe elle-même (pour les méthodes de classe), soit l'instance pertinente de la classe (pour les méthodes d'instance). Il semble, sur la base des essais présentés ci-dessus, qu'une méthode pas définie dans une classe hérite self de son interlocuteur, mais je ne trouve aucune référence officielle ou quoi que ce soit qui le confirme. Quelqu'un peut-il fournir une source officielle décrivant ce comportement et, idéalement, expliquant pourquoi il fonctionne de cette façon ?

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