在Ruby中,当方法是别名时,别名指向原始方法的主体。因此,即使您重新定义了原始方法,别名仍将继续使用原始定义。你可以重写Ruby中的别名方法吗?
class Foo
def bar
"bar"
end
alias :saloon :bar
end
class Foo
def bar
"BAR"
end
end
puts Foo.new.saloon
将返回'bar'而不是'BAR'。有没有什么办法让酒吧使用酒吧的新定义?
编辑:我应该更清楚。这个例子只是这个问题的一个例子 - 这不是我需要解决的实际问题。例如,在rails的核心中,链接别名时,问题会更加复杂。例如。 perform_action由基准测试模块别名,然后由flash模块别名。所以现在调用perform_action实际上是调用perform_action_with_flash来做它的事情,然后有效地调用perform_action_with_benchmarking,然后调用原始的perform_action。如果我想覆盖perform_action_with_benchmarking(即使我同意这是一个糟糕的主意 - 请不要讨论这个问题,因为它除了重点之外),我不能因为它已被别名,并且据我所知,别名指向原来的perform_action_with_benchmarking的副本,所以即使我重新定义它,也没有任何效果。
+1有趣(有趣)。 – 2011-05-06 01:22:13