Можно ли переопределить метод с псевдонимом в 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, поэтому даже если я переопределю его, никакого эффекта не будет.

11
задан farhadf 6 May 2011 в 03:22
поделиться