かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

ブロック!

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

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

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