Ruby で引数にメソッドを渡す
Ruby
Published: 2019-05-07

やったこと

Ruby の関数で引数にメソッドを渡す方法を調べてみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

調査

test.rb

def xxx(&yyy)
  p yyy
  yyy.call
end

def abc1
  p 'abc1'
end

## ブロック付きメソッド呼び出し
## { ... }
p '{ ... }'
xxx {
  abc1
}

## do ... end
p 'do ... end'
xxx do
  abc1
end

出力結果

$ ruby test.rb
"{ ... }"
#<Proc:0x00007faa8a036588@ruby-block.rb:13>
"abc1"
"do ... end"
#<Proc:0x00007faa8a036358@ruby-block.rb:19>
"abc1"

最後の引数の直前に & がついている場合、その引数で指定した手続き オブジェクト(Proc)やメソッドオブジェクト(Method)がブロック としてメソッドに渡されます。

参考