Une explication rapide de ce que cela signifie:
En ruby, vous pouvez définir des méthodes sur un objet particulier:
a = "hello"
def a.informal
"hi"
end
a.informal
=> "hi"
Ce qui se passe quand vous faites cela, c'est que l'objet a, qui est de classe String
, obtient sa classe changé pour un "fantôme" de la classe, aka métaclasse, classe singleton ou eigenclass. Cette nouvelle classe de super-classe est - String
.
Aussi, à l'intérieur des définitions de classe, self
est fixé à la classe définie, de sorte
class Greeting
def self.say_hello
"Hello"
end
#is the same as:
def Greeting.informal
"hi"
end
end
Ce qui s'y passe est que l'objet d' Greeting
, ce qui est de la classe Class
, obtient une nouvelle métaclasse avec les nouvelles méthodes, de sorte que lorsque vous appelez
Greeting.informal
=> "hi"
Il n'y a pas une telle chose comme les méthodes de la classe en ruby, mais la sémantique sont similaires.