1.渡されたブロックを実行する
def dice
if block_given?# block_given?メソッドは「ブロックを受け取ってますか?」というメソッド
puts "run block!"
yield# ブロックを実行
else
puts "normal dice"
puts [1,2,3,4,5,6].sample
end
end
dice
dice do#-------このブロックが実施される----------
puts [4,5,6].sample
end
2.渡されたブロックを引数で受け取る
ブロックを引数で受け取るときは「def XXX(&b)」のように、先頭に「&」をつけることでわたすことが可能
引き渡されたブロックは callメソッドを使うことで実行することができる
def foo(&b)#ブロックを変数「b」に代入して引数として渡しているので「&」のあとの文字は何でも良い
b.call#callメソッドでブロックを実行
puts b.class
end
foo do
puts "HelloWorld!"
end
HelloWorld!
Proc #*引数としてブロックを渡した際、ブロックは「Proc」というオブジェクトになっている*