Как модуль перезаписывает метод в родительском классе класса, в который он включен? - PullRequest
0 голосов
/ 11 ноября 2010

Я пытаюсь написать модуль, который перезаписывает метод экземпляра в классе, в который он включен.

Это не работает:

require 'active_support'

class Foo
  def bar
    "bar"
  end
end

module NewFoo
  extend ActiveSupport::Concern

  included do
    alias __bar__ bar
  end

  def bar
    "new " + __bar__
  end
end

class Baz < Foo
  include NewFoo
end

Я ожидаю, что Baz.new.bar.should eql "new bar", но вместо этого я получаю undefined local variable or method '__bar__' ошибку.

Я пробовал варианты вышеупомянутого, включая старый способ через def self.include(base)... безрезультатно.

Есть указатели?

1 Ответ

3 голосов
/ 11 ноября 2010

Это замечательное новое изобретение называется наследование :

module NewFoo
  def bar
    'new ' + super
  end
end

Или более идиоматически

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