Краткое объяснение, что это значит:
В ruby вы можете определить методы для конкретного объекта:
a = "hello"
def a.informal
"hi"
end
a.informal
=> "hi"
Что происходит, когда вы это делаете, это то, что объект a, который относится к классу String
, получает свой класс, замененный на класс «ghost», он же метакласс, синглтон или собственный класс. Этот новый суперкласс класса - String
.
Кроме того, в определениях классов self
устанавливается для определяемого класса, поэтому
class Greeting
def self.say_hello
"Hello"
end
#is the same as:
def Greeting.informal
"hi"
end
end
В результате получается, что объект Greeting
класса Class
получает новый метакласс с новыми методами, поэтому при вызове
Greeting.informal
=> "hi"
В ruby нет такой вещи, как методы класса, но семантика похожа.