En Ruby, cuando se alias un método, el alias apunta al cuerpo del método original. Entonces, incluso si redefine el método original, el alias continuará usando la definición original.¿Puedes anular un método de alias en Ruby?
class Foo
def bar
"bar"
end
alias :saloon :bar
end
class Foo
def bar
"BAR"
end
end
puts Foo.new.saloon
devolverá 'bar' y no 'BAR'. ¿Hay alguna manera de hacer que el salón use la nueva definición de barra?
EDITAR: Debería haber sido más claro. El ejemplo fue solo una ilustración del problema: no es el problema real que necesito resolver. El problema es más complejo cuando tienes alias encadenados, por ejemplo, en el núcleo de Rails. P.ej. perform_action es un alias del módulo de evaluación comparativa, y luego también del módulo flash. Así que ahora una llamada a perform_action en realidad está llamando a perform_action_with_flash, lo que hace es una cosa, entonces efectivamente llama a perform_action_with_benchmarking, que luego llama al perform_action original. Si quiero anular perform_action_with_benchmarking (aunque estoy de acuerdo en que es una mala idea, por favor no nos metamos en una discusión de eso, ya que está más allá del punto), no puedo porque ha sido un alias, y por lo que puedo decir, alias apunta a lo que es esencialmente una copia del original perform_action_with_benchmarking, por lo que incluso si lo redefino, no hay ningún efecto.
+1 Gracioso (e interesante). –