Rubyでブロックの中でyieldするコードの挙動
Rubyのコードを読んでいて、ブロックの中でyieldしているコードに出会って、どういう動きをするんだか気になったので動きを調べました。
そもそも、私のyieldに対する理解はは「与えたブロックで置き換わる」というもので、ブロックの中が与えたブロックで置き換わるってどういうことだ!?という所が混乱の元になったのだと思います。
確認コード
要するに、下記のようなコードがあったとき、call_yield_in_blockを呼ぶとどういう動きをするか?ということです。
code:ruby
class BlockTest
class << self
def call_yield_in_block
yield_in_block({k:'abc'}) do |id, ids|
p id.to_s + '>' + ids.to_s
end
end
private
def yield_in_block(params)
ids.each do |id|
yield(id, ids)
end
end
end
end
これをirbとかで読み込んで、BlockTest.call_yield_in_blockとかして呼び出すと、次のような結果になります
code:bash
という訳で、ブロックの中に放り込んだyieldで行うべきアクションを外側から制御できるような挙動になるようです。
こうしてコードを書いて、動かして、さらに文章にまとめ直してみても直感的に理解するのが難しい挙動なので、「書かないに越したことは無い」という類の挙動だと思います。