在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