Techioz Blog

Ruby: ブロックが受け入れるパラメーターの数を確認するにはどうすればよいですか?

概要

ブロックをパラメータとして受け取るメソッドを設定しようとしています。最後のパラメータに & プレフィックスを付けることでこれを行うことはわかっていますが、それが渡された後は、どのように検証すればよいでしょうか?

引数が文字列であることを確認したい場合は、たとえば is_a?(String) を使用できます。しかし、1 つのパラメーターを受け入れるブロックを受信したことを確認するにはどうすればよいでしょうか?それとも2?

解決策

Proc#arity メソッドを使用して、ブロックが受け入れる引数の数を確認できます。

def foo(&block)
  puts block.arity
end

foo { }        # => 0
foo { |a| }    # => 1
foo { |a, b| } # => 2

ドキュメントから: