It comes up very often. Should I use alias or alias_method . Lets take a look at them in a bit detail.
Usage of alias
1 2 3 4 5 6 7 8 9 10 | |
Usage of alias_method
1 2 3 4 5 6 7 8 9 10 | |
First difference you will notice is that in case of alias_method we need to use a comma between the “new method name” and “old method name”.
alias_method takes both symbols and strings as input. Following code would also work.
1
| |
That was easy. Now lets take a look at how scoping impacts usage of alias and alias_method .
Scoping with alias
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
In the above case method “name” picks the method “full_name” defined in “Developer” class. Now lets try with alias.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
With the usage of alias the method “name” is not able to pick the method “full_name” defined in Developer.
This is because alias is a keyword and it is lexically scoped. It means it treats self as the value of self at the time the source code was read . In contrast alias_method treats self as the value determined not at the run time.
Overall my recommendation would be to use alias_method. Since alias_method is a method defined in class Module it can be overridden later and it offers more flexibility. Also because of lexical scoping of alias it can do some weird things unless all the developers who whats going on.