Недавно я изучал некоторые детали классов в Ruby и был сбит с толку определением класса.
В Ruby определение класса выглядит следующим образом:
class A
def self.my_method
end
end
и это то же самое, что и
class A
class << self
def my_method
end
end
end
тогда я был сбит с толку. В первом случае self можно рассматривать как указатель на объект, который в данный момент используется, а текущий класс контекста - A. И поиск метода выполняется рекурсивно. Но у меня вопрос: что делает def? Как он меняет текущий объект и контекст? Проблема такая же для 2-го случая. Как такое описание, как class ‹< self, изменяет текущий объект и контекст?
И еще вопрос. Насколько мне известно, все объекты Class подчиняются шаблонам проектирования, таким как fly-weight, поскольку они используют один и тот же объект Class с одинаковым определением. Затем собственный класс запутался. Поскольку def в собственном классе фактически определяет метод с объектом Class, как это может быть связано с def self. *?
Снаружи это выглядит слишком сложным, и мне могут понадобиться детали дизайна Ruby.
def self.foobar
объявляет метод класса, аdef foobar
объявляет методы экземпляра, в которых self является текущим экземпляром. Что касается ваших случаев ... разве они не должны быть одинаковыми? (вы объявляете методы класса) - person robustus   schedule 27.10.2011