かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

ブロック!

メソッドの引数の最後に&つきの引数を定義するとブロックが入ってくる。

def hoge &block
  p block.class
end

puts "blockなし呼び出し"
hoge

puts "block有り呼び出し"
hoge {
}

実行結果は

blockなし呼び出し
NilClass
block有り呼び出し
Proc

になる。


ふ〜ん。
ってことは、ブロックを受け取るメソッドの引数にProc渡してやればブロック渡したのと同じになる??

proc = Proc.new {|value| 
    value.to_s
}

p [1, 2, 3].map &proc

とすると実行結果は

["1", "2", "3"]
C:/DOCUME~1/****/LOCALS~1/Temp/rb1E.tmp:5: warning: parenthesize argument(s) for future version

う〜ん。動いてるっぽいけど何かよからぬことみたいだ。
後でもうちょい調べてみよう。