La syntaxe class << some_objct
ouvre classe singleton s » de some_object
, qui est une classe spéciale "secret" que seul cet objet appartient. En utilisant la classe singleton, vous pouvez définir les méthodes auxquelles un objet répond alors que les autres instances de sa classe normale ne le font pas.
Ainsi, par exemple:
a = "Hello world"
b = "Hello world" # Note that this is a different String object
class << a
def first_letter
self[0,1]
end
end
puts a.first_letter # prints "H"
puts b.first_letter # Raises an error because b doesn't have that method
Dans un contexte de classe, ces deux définitions de méthode sont équivalentes:
class Foo
def self.bar
puts "Yo dawg"
end
end
class Foo
class << self
def bar
puts "Yo dawg"
end
end
end
La deuxième forme peut être utile dans certaines circonstances (par exemple lorsque vous voulez déclarer attr_accessor
s pour l'objet de classe lui-même).
Quel objet actuel? – OscarRyz
OscarRyz: l'instance dans laquelle le code est appelé. –
Je pense que cette réponse devrait parler plus explicitement de la classe singleton ou eigenclass. "rouvrir la classe d'un objet depuis l'intérieur de lui-même" est trop vague et le mot "classe" tel qu'il est utilisé ne précise pas que la classe est la classe singleton, et pas seulement la classe renvoyée en passant 'obj.class' – horseyguy