Ruby: Что означает модуль, включенный в метод? - PullRequest
5 голосов
/ 17 января 2011

Я знаю, что модуль может быть включен в класс или другой модуль. Но я увидел здесь , что модуль включен в метод . Что это значит?

module ActsAsVotable

  module ClassMethods

    def acts_as_votable
      has_many :votes, :as => :votable, :dependent => :delete_all
      include InstanceMethods    # What does this means ??
    end

  end

  module InstanceMethods

    def cast_vote( vote )
      Vote.create( :votable => self, :up => vote == :up )
    end

  end

end

1 Ответ

4 голосов
/ 17 января 2011

В этом случае определенный метод должен вызываться на уровне класса, например:

class Foo
    include ActsAsVotable
    acts_as_votable
end

В Ruby есть эта замечательная / ужасная (зависит от того, кого вы спрашиваете) функция, которую вы можете динамическиопределить класс.Здесь метод acts_as_votable сначала вызывает has_many (что добавляет несколько методов к классу Foo), а затем добавляет метод cast_vote к классу Foo через include InstanceMethods.

* 1011.* Итак, вы получите эквивалент:
class Foo
   # Will add further methods.
   has_many :votes, :as => :votable, :dependent => :delete_all

   # include InstanceMethods
   def cast_vote( vote )
       Vote.create( :votable => self, :up => vote == :up )
   end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...