読者です 読者をやめる 読者になる 読者になる

メソッドを変数に入れて呼び出す(Ruby)

Ruby Python

メソッドを変数に入れて呼び出すのは、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 であるに過ぎない。