2015-03-06 1 views
0

Этот код из книги Rails ускоренный курс:Явное использование `self` в имени метода в определении класса

class Accessor 
    def self.accessor(attr) 
    class_eval " 
     def #{attr} 
     @#{attr} 
     end 

     def #{attr}=(val) 
     @#{attr} = val 
     end 
    " 
    end 
end 

Идея заключается в том, что подкласс Accessor может создавать методы получения и установки, вызвав accessor метод с именем атрибута, для которого мы хотим, чтобы генерировать методы получения и установки:

class Element < Accessor 
    accessor :name 
... 

Но, почему использование self в def self.accessor(attr)?

ответ

3

Поскольку вы хотите определить аксессоры для всех экземпляров класса; вы не хотите определять их для определенных экземпляров и не определять их для других экземпляров. Следовательно, определение аксессуаров - это то, что вы хотите сделать против класса, а не экземпляра; таким образом, accessor должен быть методом класса, а не методом экземпляра. Он будет вызываться в классе класса при его использовании.

+0

Действительно! Я пришел из Java и python, и я забыл синтаксис для определения методов класса. Спасибо. – malfunctioning

 Смежные вопросы

  • Нет связанных вопросов^_^