ブロックを任意のメソッドに付けられる?
- 作者: まつもとゆきひろ,David Flanagan,卜部昌平(監訳),長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2009/01/26
- メディア: 大型本
- 購入: 21人 クリック: 356回
- この商品を含むブログ (118件) を見る
プログラミング言語 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 ....