いい例を思いつかなかったので適当なサンプルだが、例えば以下のように alias を使ってメソッドに別名を付けたい場合、クラスメソッドだと上手く行かない。
class Status
STATUS = {
0 => "open",
1 => "close",
2 => "suspend",
9 => "error",
}
def self.name(code)
STATUS[code]
end
alias :[] :name
end
#=> undefined method `name' for class `Status' (NameError)
alias_method でも駄目。
class Status
STATUS = {
0 => "open",
1 => "close",
2 => "suspend",
9 => "error",
}
def self.name(code)
STATUS[code]
end
alias_method :[], :name
end
#=> `alias_method': undefined method `name' for class `Status' (NameError)
結局以下のようにしたら出来た。
class Status
STATUS = {
0 => "open",
1 => "close",
2 => "suspend",
9 => "error",
}
def self.name(code)
STATUS[code]
end
class << self
alias :[] :name
end
end
puts Status.name(0) #=> open
puts Status[9] #=> error
alias_method でも同じようにやれば出来る。
class << self
alias_method :[], :name
end
参考
alias
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fdef.html#alias
instance method Module#alias_method
http://docs.ruby-lang.org/ja/2.1.0/method/Module/i/alias_method.html
How to alias a class method - Ruby
http://www.justskins.com/forums/how-to-alias-a-102105.html
alias_method for static method - Ruby Forum
https://www.ruby-forum.com/topic/112031