Ruby

Ruby | alias_method はメソッド / alias はキーワード

More than 1 year has passed since last update.

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]

参考