alias_method
メソッドなのでオーバーライド出来る。
class User
def full_name
puts "Strawberry Kiwi"
end
# alias_method メソッドをオーバーライドする
def self.alias_method(arg1, arg2)
puts "alias_method : #{arg1} to #{arg2}"
end
# オーバーライドしたメソッドが呼ばれる
alias_method :name, :full_name # alias_method : name to full_name
# 同じくオーバーライドしたメソッドが呼ばれる
self.alias_method :name, :full_name # alias_method : name to full_name
end
# メソッドのエイリアスはおこなわれていない
User.new.name # undefined method `name'
alias
言語キーワードなのでオーバーライドできない。
class User
def full_name
puts "Banana Orange"
end
# alias メソッドを定義する
def self.alias(arg1, arg2)
puts "alias : #{arg1} to #{arg2}"
end
# オーバーライドしたメソッドが呼ばれる
self.alias :name, :full_name # alias : name to full_name
# 言語キーワードとして実行される
alias :name :full_name
end
# エイリアスが生成されている
User.new.name # Banana Orange
こんな風に、メソッド自体を引数として渡しているかのように書けるのも、alias
がメソッドではなくてキーワードだから。(たぶん)
alias name full_name
環境
- ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin15]
参考
- http://blog.bigbinary.com/2012/01/08/alias-vs-alias-method.html
- https://stackoverflow.com/questions/4763121/should-i-use-alias-or-alias-method
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。