В Ruby class << foo
открывает одноэлементный класс объекта, на который ссылается foo
. В Ruby каждый объект имеет связанный с ним одноэлементный класс, который имеет только один экземпляр. Этот одноэлементный класс поддерживает специфичное для объекта поведение, то есть одноэлементные методы.
Итак, class << self
открывает одноэлементный класс self
. Что именно self
является , конечно, зависит от контекста, в котором вы находитесь. Например, в теле определения модуля или класса это сам модуль или класс.
Если все, что вы используете для одноэлементного класса, это определение одноэлементных методов, на самом деле для этого есть ярлык: def foo.bar
.
Вот пример того, как использовать одноэлементные методы для предоставления некоторых «процедур», которые на самом деле не имеют никакой связи с конкретным экземпляром:
class << (Util = Object.new)
def do_something(n)
# ...
end
end
Util.do_something(n)