base.extend против base.class_eval extension - PullRequest
9 голосов
/ 10 ноября 2009

Является ли этот синтаксис функционально эквивалентным

  def self.included(base)
    base.class_eval do
      extend ClassMethods
    end
  end

к этому?

  def self.included(base)
    base.extend ClassMethods
  end

1 Ответ

8 голосов
/ 11 ноября 2009

Единственное существенное отличие состоит в том, что только классы отвечают на "class_eval", тогда как и классы, и экземпляры отвечают на "extended".

Если вы не планируете использовать свой метод с экземплярами объекта, то они эквивалентны, хотя вторая реализация может использоваться для добавления методов экземпляра к определенному экземпляру, а первая - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...