__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を
    使用してください。