Рубиновая книга, которую я читаю, немного смутила меня.Если я сделаю следующее, я пойму полностью, почему код выдает ошибку:
class Person
def show_name
puts @name
end
end
person = Person.new
person.show_name
Person.show_name #(note the capital P) this line falls over
Он выдает ошибку, утверждая, что у класса Person нет метода с именем show_name, потому что это метод экземпляра.Я понимаю это полностью.Затем в этом примере книга выдает:
class Class
def add_accessor(accessor_name)
self.class_eval %Q{attr_accessor :#{accessor_name}}
end
end
class Person
end
person = Person.new
Person.add_accessor :name #note the capital P
Person.add_accessor :age #capital P here too
person.name = "Mikey"
person.age = 30
puts person.name
и продолжает утверждать, насколько круто, что вы можете динамически добавлять методы в классы.Чего я не понимаю, так это почему мне вдруг разрешают вызывать метод add_accessor как метод класса (с большой буквы P), если сам метод не определен как таковой?Я думал, что все методы класса должны быть объявлены так?
class Math
def self.PI
3.141
end
end
puts Math.PI
Кто-нибудь может меня просветить?