__send__
の使いかたが分かった。
def hoge(arg) #なんか処理 end __send__(:hoge, arg)
Cで配列辺りに関数ポインタのリストを持っておいて、
動的に関数を呼ぶような処理に使える。
しかもcaseなんか使用するよりエレガント。
sendでもいいみたい。
$ refe __send__|nkf -w Object#__send__ --- send(name[, args ... ]) --- send(name[, args ... ]) { .... } --- __send__(name[, args ... ]) --- __send__(name[, args ... ]) { ... } オブジェクトのメソッド name を、引数に args を 渡して呼び出し、メソッドの実行結果を返します。 ブロック付きで呼ばれたときはブロックもそのまま引き渡します。メソッ ド名 name は文字列かSymbol です。 send が再定義された場合に備えて別名 __send__ も 用意されており、ライブラリではこちらを使うべきです。また __send__ は再定義すべきではありません。 send, __send__ は、呼び出し制限 にかかわらず任意のメソッドを呼び出せます。 ruby 1.9 feature: 呼び出し制限がsend, __send__にも 影響するようになり、レシーバを指定した呼び出しではprivateメソッドを 呼び出せなくなりました。 privateメソッドを呼び出す必要がある場合はinstance_evalを 使用してください。