aliasとalias_methodの続き:
http://d.hatena.ne.jp/rubyco/20060319/aliasより。
id:rubycoさんの実験によると、メソッドの中でaliasが使える模様。ということで、ちょっと実験してみた。
def rubyco puts "rubyco" end def change(x) alias_method :walf443, :rubyco end #=> undefined method `alias_method' for main:Object def change(x) alias walf443 rubyco end walf443 #=> rubyco
ということで、マニュアルはalias_methodがメソッドの中で使えないというのが正しいみたいですね。すなわち、動的に処理をしたいならaliasを使わないといけないようです。また、attr_accessorみたいなClass(Module)の補助機能的なメソッドはModuleクラスにprivateで定義しておくとよいみたいです。
そこで、動的な名前をつけるメソッドを考えてみる。
class SomeClass alias_method :walf443, :rubyco def rubyco puts "rubyco" end def change(x) alias x rubyco end end obj = SomeClass.new obj.rubyco #=> rubyco obj.walf443 #=> rubyco obj.change :hoge obj.hoge #=> undefined method `hoge' for #<SomeClass:0x40317280>
とのことで、aliasに変数は渡せないらしい。となると、結局動的な名前をつけるためにはevalを使わないとならないので、それならclass_evalでalias_methodを使えばいいじゃんという話になる気がする。。。