alias

id:walf443さんの記事を読んでいて、「alias は構文なのでメソッドの中では使えない」というrefeの記述を見ました。へえ…と思って試します。

def rubyco
  puts "rubyco"
end

def change(x)
  if x
    alias org_rubyco rubyco
  end
end

change(false)
org_rubyco          #=> undefined local variable or method `org_rubyco' for main:Object (NameError)
def rubyco
  puts "rubyco"
end

def change(x)
  if x
    alias org_rubyco rubyco
  end
end

change(true)
org_rubyco          #=> rubyco

疑問:…あれ? 上の2つの実行結果だと、メソッドの中でaliasが使えているように思うのですが、これはわたしの勘違いでしょうか。
追記:id:walf443さんがさらに調査してくださったようです。それによると:

  • メソッドの中で使えないのはalias_methodのようである
  • aliasに変数を渡して、動的に別名を付けるのはできないらしい