メソッドを変数に入れて呼び出す(Ruby)
メソッドを変数に入れて呼び出すのは、Python では簡単。
def b(): print("test") a = b a() #=>"test"
これは Ruby でもできる。Ruby がおもしろいのは、推奨されない手法を使うのが多少面倒になっていること。Object#send
メソッドを使う。
a = def b puts "test" end send(a) #=>"test"
しかし、Ruby ではメソッドでこういうことはあまりやらない。ふつうはブロック(Proc オブジェクト)をポータブルに使う。
※追記(11/19)
上の Python と同じような書き方にしたければ、以下のように書けばよい。Object#method
メソッドを使う。これも Ruby は、わざわざ面倒にしてある。
def b puts "test" end a = Object.new.method(:b) a.call #=>"test"
最終行は a[]
でもよい。なお、この変数 a は Method クラスのオブジェクトであるが、上の send(a)
で送られている a は Symbol であるに過ぎない。