ブロックを任意のメソッドに付けられる?

プログラミング言語 Ruby

プログラミング言語 Ruby

プログラミング言語 Ruby をつらつらと読んでいて
ふと引っかかったのでメモ.

6.4.5.1 メソッド呼び出しにおける &
P. 198
(前略)... ブロックは,メソッドがブロックを予定していなくても,yieldを使わなくても,任意のメソッド呼び出しに付けられる.

# ruby 1.9.2 で試す

# 適当なメソッド
def hello(x)
  puts "Hello, " + x.to_s
end

# inject に使いそうなProcオブジェクト
proc = Proc.new {| total , x | total + x}

hello("World", &proc)  #=> Hello, World

# 適当なブロックを渡してみる
hello("World") {|x| p }  #=> Hello, World

たしかにブロックを受け取る予定のないメソッドにProcオブジェクトを渡しても引数の例外(ArgumentError)が出ない.
出来るけど何が嬉しいのやら?

ちなみに,ブロックを受け付けるメソッドに不適切なProcオブジェクトを与えると当然のようにエラーになる.

%w(and but car).map &proc  # 前述のProcオブジェクト
TypeError: can't convert nil into String
....