Should I use alias or alias_method?
Apart from the syntax, the main difference is in the scoping:
# scoping with alias_methodclass User def full_name puts "Johnnie Walker" end def self.add_rename alias_method :name, :full_name endendclass Developer < User def full_name puts "Geeky geek" end add_renameendDeveloper.new.name #=> 'Geeky geek'
In the above case method “name” picks the method “full_name” defined in “Developer” class. Now lets try with alias
.
class User def full_name puts "Johnnie Walker" end def self.add_rename alias name full_name endendclass Developer < User def full_name puts "Geeky geek" end add_renameendDeveloper.new.name #=> 'Johnnie Walker'
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 at the run time.
Source: http://blog.bigbinary.com/2012/01/08/alias-vs-alias-method.html