В 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.Например, execute_action связывается с модулем бенчмаркинга, а затем также с модулем flash.Таким образом, теперь вызов execute_action фактически вызывает execute_action_with_flash, который делает свое дело, а затем фактически вызывает execute_action_with_benchmarking, который затем вызывает исходную execute_action.Если я хочу переопределить execute_action_with_benchmarking (даже если я согласен, что это плохая идея - пожалуйста, давайте не будем обсуждать это, поскольку это не имеет значения), я не могу, потому что это было псевдонимом, и насколько я могу сказать,псевдоним указывает на то, что по сути является копией оригинального execute_action_with_benchmarking, поэтому даже если я переопределю его, никакого эффекта не будет.