Явное использование `self` в имени метода в определении класса
Этот код взят из книги Rails Crash Course:
class Accessor
def self.accessor(attr)
class_eval "
def #{attr}
@#{attr}
end
def #{attr}=(val)
@#{attr} = val
end
"
end
end
Идея заключается в том, что подкласс Accessor
может создавать методы получения и установки, вызывая accessor
метод с именем атрибута, для которого мы хотим сгенерировать методы getter и setter:
class Element < Accessor
accessor :name
...
Но почему использование self
в def self.accessor(attr)
?
1 ответ
Решение
Потому что вы хотите определить методы доступа для всех экземпляров класса; Вы не хотите определять их для определенных экземпляров и не определять их для других экземпляров. Следовательно, определение методов доступа - это то, что вы хотите сделать с классом, а не с экземпляром; таким образом accessor
должен быть методом класса, а не методом экземпляра. Он будет вызываться в теле класса при использовании.