1

我想修补一个为其创建的方法,alias_method_chain但不调用覆盖的方法

# foo.rb
require 'active_support/core_ext'

class Foo
  def foo
    "original foo"
  end

  def foo_with_flag
    "foo with flag"
  end

  alias_method_chain :foo, :flag
end

# foo_ext.rb
class Foo
  def foo_with_flag
    "overridden foo with flag"
  end
end

foo = Foo.new
foo.foo # => "foo with flag"
foo.foo_with_flag # => "overridden foo with flag"

我怎样才能Foo#foo使用的最后一个实现Foo#foo_with_flag

4

1 回答 1

2

第一个alias_method_chainalias_method :foo, :foo_with_flag(第一个定义的副本),当您重新定义时foo_with_flag :foo仍然是第一个定义的别名。您必须alias_method :foo, :foo_with_flag在第二个定义(而不是“整个链”)之后再做一次。

于 2012-11-19T20:53:26.140 回答