yieldとproc
今まで何度もブロックを使ってきた
しかし、今まで使ってきたのは既存のメソッド(each,mapなど)
自分でもブロックで使うメソッドは定義できるのか?
【結論】できる
ここからはブロックを利用するメソッドの定義、処理を引数や変数として渡す方法をまとめる
各エフェクトにcallというメソッドを実装する
yield→ブロックを利用するメソッドの定義をする
渡されたブロックを実行するためにメソッドないでyieldを使う
def greeting
puts 'おはよう'
yield
puts 'こんばんは'
end
greeting do
puts 'こんにちは'
end
=> おはよう
こんにちは
こんばんは
yieldは引数をブロックに渡したり、戻り値を受け取って出力もできる
ブロックを明示的にメソッドの引数として受け取るには?
→引数名の前に&をつける
ブロックの引数はメソッド定義につき一つしか指定できない
また、他の引数がある場合はブロックの引数を必ず最後に指定する