結論
標題のとおりなのですが、実際の例を見るのが早いかと思います。
1. まずはメソッドを定義する
foobar
というメソッドを定義します- 引数として「ブロック引数*1」を受け取るように定義します
def foobar(&block_hikisu) block_hikisu.call end
2-1. OKな場合: foobar
メソッドの引数として { puts 'Hello, Block Hikisu!' }
を与えて実行する場合
- この場合は OK です
> foobar { puts 'Hello, Block Hikisu!' } Hello, Block Hikisu!
2-2. NGな場合: 2-1.
と同様に foobar
メソッドの引数として { puts 'Hello, Block Hikisu!' }
を与えるけれども、カッコつきで与えて実行する場合
- この場合はエラーが出ます
> foobar ({ puts 'Hello, Block Hikisu!' }) SyntaxError: unexpected '}', expecting end-of-input ...oobar ({ puts 'Hello, Block Hikisu!' })
補足
&block_hikisu
の形で引数を定義した場合は、引数として Procオブジェクトを与えてもエラーとなります。
*1:ここでは &block_hikisu