Source From Here
Preface
It comes up very often. Should I use alias or alias_method . Lets take a look at them in a bit detail.
alias vs alias_method
Usage of alias
Usage of alias_method
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:
That was easy. Now lets take a look at how scoping impacts usage of alias and
alias_method.
Scoping with alias
In the above case method "name" picks the method "full_name" defined in "
Developer" class. Now lets try with alias.
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. 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.
Supplement
* Blog - Method alias in ruby
Preface
It comes up very often. Should I use alias or alias_method . Lets take a look at them in a bit detail.
alias vs alias_method
Usage of alias
- class User
- def full_name
- puts "Johnnie Walker"
- end
- alias name full_name
- end
- User.new.name #=>Johnnie Walker
- class User
- def full_name
- puts "Johnnie Walker"
- end
- alias_method :name, :full_name
- end
- User.new.name #=>Johnnie Walker
- alias_method 'name', 'full_name'
Scoping with alias
- class User
- def full_name
- puts "Johnnie Walker"
- end
- def self.add_rename
- alias_method :name, :full_name
- end
- end
- class Developer < User
- def full_name
- puts "Geeky geek"
- end
- add_rename
- end
- Developer.new.name #=> 'Gekky geek'
- class User
- def full_name
- puts "Johnnie Walker"
- end
- def self.add_rename
- alias :name :full_name
- end
- end
- class Developer < User
- def full_name
- puts "Geeky geek"
- end
- add_rename
- end
- Developer.new.name #=> 'Johnnie Walker'
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. 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.
Supplement
* Blog - Method alias in ruby
沒有留言:
張貼留言