Old Emmanuel Oga's Weblog (new one is at www.emmanueloga.com)

alias versus alias_method

Posted in ruby by emmanueloga on noviembre 1, 2007

alias y alias_method hacen lo mismo: copian un metodo y le asignan un nombre diferente:

class Test
  def test
    puts "hola"
  end
  alias copia_test test
  alias_method :copia_test2, :test
end

Test.new.test        # > "hola"
Test.new.copia_test  # > "hola"
Test.new.copia_test2 # > "hola"

Me surgio la curiosidad de saber la diferencia entre alias y alias_method. Resulta que son la misma cosa, excepto que:

  1. alias es una palabra reservada de ruby
  2. alias toma como parametros identificadores de metodo, sin necesidad de usar symbols o strings (como al usar def nombre_metodo, nombre_metodo es un identificador y no un string o symbol). Este comportamiento puede ser bastante confuso al principio.
  3. alias_method es un metodo de clase de Module
  4. alias_method toma los parametros separados por coma (strings o symbols), como cualquier otro metodo.

Las concecuencias son sencillas:

  • alias_method puede ser redefinido, y alias no.
  • alias puede ser usado incorrectamente (fuera del contexto de definicion de metodos)

Al ser un methodo de Module, alias_method ayuda a ser usado correctamente: en el contexto de la definicion de metodos de una clase o modulo.

Conclusion: en la mayoria de los casos, alias_method es lo que necesito.

Tagged with:

3 comentarios

Subscribe to comments with RSS.

  1. Patrick Joyce said, on enero 22, 2008 at 8:50 pm

    He traducido su post a ingles para ellos quien no son hispanohablantes.

    I’ve translated your post to English for the non-spanish speakers.

    English Version of this post.

  2. Michel said, on diciembre 12, 2008 at 6:53 pm

    On the other hand, alias is slightly faster than alias_method and it’s also shorter.

    • emmanueloga said, on diciembre 12, 2008 at 7:49 pm

      Yes, but “alias_method” is more expressive than just “alias” (aliasing what? aliasing a method!🙂.

      Regarding the speed, if that is speed of execution in successive methods calls, then it is a very good reason to use alias (maybe… I mean, if the method is used a lot or in a loop). If it is speed of aliasing then I don’t care a lot, since I’m “configuring” the class just once.


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: