Pregunta

Si estos dos métodos son simplemente sinónimos, ¿por qué la gente se toma la molestia de escribir los caracteres adicionales " _chain " ;?

¿Fue útil?

Solución

No. alias_method es un método estándar de Ruby. alias_method_chain es un complemento de Rails diseñado para simplificar la acción común de aliasar el método antiguo a un nuevo nombre y luego aliasar un nuevo método al nombre original. Entonces, si por ejemplo está creando una nueva versión del método method con la nueva función new_feature , los siguientes dos ejemplos de código son equivalentes:

alias_method :method_without_new_feature, :method
alias_method :method, :method_with_new_feature

y

alias_method_chain :method, :new_feature

EDITAR

Aquí hay un ejemplo hipotético: supongamos que tenemos una clase Person con un método rename . Todo lo que hace es tomar una cadena como '' John Doe '', dividir en el espacio y asignar partes a first_name y last_name. Por ejemplo:

person.rename("Steve Jones")
person.first_name  #=> Steve
person.last_name   #=> Jones

Ahora estamos teniendo un problema. Seguimos recibiendo nuevos nombres que no se capitalizan correctamente. Entonces podemos escribir un nuevo método rename_with_capitalization y usar alias_method_chain para resolver esto:

class Person
  def rename_with_capitalization(name)
    rename_without_capitalization(name)
    self.first_name[0,1] = self.first_name[0,1].upcase
    self.last_name[0,1] = self.last_name[0,1].upcase
  end

  alias_method_chain :rename, :capitalization
end

Ahora, el antiguo rename se llama rename_without_capitalization , y rename_with_capitalization es rename . Por ejemplo:

person.rename("bob smith")
person.first_name  #=> Bob
person.last_name   #=> Smith

person.rename_without_capitalization("tom johnson")
person.first_name  #=> tom
person.last_name   #=> johnson

Otros consejos

alias_method_chain es la peor forma de interceptar llamadas de método. Si está buscando técnicas similares, no lo use fuera de los rieles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top