Наскоро проучвах някои подробности относно класовете в 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 променя текущия обект и контекст?
И още един въпрос. Доколкото ми е известно, всички Class обекти се подчиняват на дизайнерски модели като fly-weight, тъй като споделят един и същ Class обект с една и съща дефиниция. Тогава собственият клас стана объркващ. Тъй като def в eigenclass всъщност дефинира метод с обект Class, как може да бъде свързан с "def self.*"?
Изглежда твърде сложно отвън и може да се нуждая от детайлите на дизайна на Ruby.
def self.foobar
декларира метод на клас, докатоdef foobar
декларира методи на екземпляр, в който self е текущият екземпляр. колкото до твоите случаи...не трябва ли и двата да са еднакви? (вие декларирате методи на клас) - person robustus   schedule 27.10.2011