unfoldとブロックと多値

RubyでListライブラリの続き.
unfoldを作ってみたんだけど,procを3つも渡さないといけないので面倒.Rubyは1つしかブロックが渡せないからなぁ.

unfold(proc {|i| i == 10}, proc {|i| i * 2}, proc {|i| i + 1}, 0)
# => (0 2 4 6 8 10 12 14 16 18)

そこで俺は考えた.ブロックが1つしか渡せないなら,ブロックから値を3つ返せばいいじゃないか!
というわけでunfoldを作り替えてみた.

unfold(0) {|i| [i == 10, i * 2, i + 1]}
# => (0 2 4 6 8 10 12 14 16 18)

多値を返そうと思ったら,配列返さないといけないよーと思うとキモいけど,valuesとか書かなくても[]で括るだけで多値返せるよーと考えればキモクナーイ.


でも,この方法で複数のブロックを渡せない問題が全て解決するわけではない気がする.