【发布时间】:2011-05-06 00:29:10
【问题描述】:
在 Ruby 中,当一个方法有别名时,别名指向原始方法的主体。所以即使你重新定义了原来的方法,别名也会继续使用原来的定义。
class Foo
def bar
"bar"
end
alias :saloon :bar
end
class Foo
def bar
"BAR"
end
end
puts Foo.new.saloon
将返回 'bar' 而不是 'BAR'。有什么办法让saloon 使用bar 的新定义?
编辑:我应该更清楚。这个例子只是问题的一个例子——它不是我需要解决的实际问题。当您有链接别名时,问题会更加复杂,例如,在 rails 的核心中。例如。 perform_action 被基准测试模块别名,然后也被闪存模块别名。所以现在对 perform_action 的调用实际上是调用 perform_action_with_flash 来完成它的事情,然后有效地调用 perform_action_with_benchmarking 然后调用原始的 perform_action。如果我想覆盖 perform_action_with_benchmarking (即使我同意这是一个坏主意 - 请让我们不要讨论它,因为它不是重点),我不能因为它已经被别名了,据我所知别名指向本质上是原始 perform_action_with_benchmarking 的副本,所以即使我重新定义它,也没有效果。
【问题讨论】:
标签: ruby-on-rails ruby alias