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 ?