最近Rubyのコードを読んでいる時にyield
が使用されていたので、
yield
の用法を振り返る。
1. yield
公式ガイドより参照。
自分で定義したブロック付きメソッドでブロックを呼び出すときに使います。 引数をブロックパラメータとして渡してブロックを評価します。
読んだだけだとあまり理解できなかったでの実際にコードを書いてみた。
2. 実際に書いてみた
次のコードを書いてみた。
def foo yield(10,20) end foo {|a,b| p [a, b] p a + b + 30 p a * b }
結果は次のようになった。
>ruby ~/projects/index.rb [10, 20] 60 200
このコードは次の流れで実行されている。
- fooメソッドでは与えられたブロック(手続き)に引数10, 20を渡して実行することを定義している。 このとき手続き自体は決められてはいない。
- 次にfooに2つの引数の手続きをしている。 具体的にはaに10を、bに20を代入している。
- その後2つの引数に対して、各指定された働きをしている。 具体的には2つの引数を配列にくくっての表示させたり、 足し算や掛け算をしている。
3 まとめ
yieldが使われているメソッド内では引数を確認し、 実際の関数でどのように引数を働かせているのを確認するのがよいかと考えます。 yieldだけよんでもわかりにくいだけかもれしれない。