2013-07-20 4 views
0

Существует следующий код в RoR:Выполнение метода в классе Ruby,

class Product < ActiveRecord::Base 
    validates :title, :description, :image_url, presence: true 
end 

Я прочитал несколько книг на Ruby, но я не видел в ООП пункте информацию о выполнении методов класса в классе (нет другой способ) корпус! Что это? Как это работает? Когда выполняется этот метод? Пожалуйста, дайте мне понять этот вопрос. Благодарю.

+0

вам нужно пойти * codeacadamy * .. Они объяснили это .. –

+0

Metaprogramming Ruby book - в нем есть все ответы! –

ответ

2

Метод выполняется, когда он вызывается. В контексте класса класса self становится этим классом. self в качестве приемника можно опустить, поэтому validates здесь то же самое, что и Product.validates ... или self.validates .... validates - метод класса на Active::Base и вызывается во время определения класса.


В моем понимании, self и неявный приемник означают разные вещи в зависимости от того, где он находится.

module Foo 
    # module body 
    def # method name 
    # method body 
    end 
end 
  1. В теле модуля
    • self: модуль
    • неявное приемник: модуль
  2. В имени метода
    • self: модуль
    • неявное приемник: экземпляр класса
  3. В теле метода
    • self: приемник в имени метода
    • неявного приемника: приемник в имени метода