Недавно я изучил некоторые подробности о классах в Ruby, и был озадачен определением класса.
В Ruby определение класса выглядит следующим образом:
class A
def self.my_method
end
end
, и этотак же, как
class A
class << self
def my_method
end
end
end
, тогда я растерялся.В первом случае self может рассматриваться как указатель на используемый в данный момент объект, а текущий класс контекста - A. И поиск метода выполняется рекурсивно.Но мой вопрос: что делает def ?Как это меняет текущий объект и контекст?Проблема та же для второго случая.Как описание типа class << self </strong> меняет текущий объект и контекст?
И еще один вопрос.Насколько я знаю, все объекты Class подчиняются шаблонам проектирования, таким как муха, так как они совместно используют один и тот же объект Class с одинаковым определением.Тогда собственный класс стал запутанным.Так как def в собственном классе на самом деле определяет метод с объектом Class, как он может быть связан с «def self. *»?
Снаружи он выглядит слишком сложным, и мне могут понадобиться детали дизайна Ruby.