Iterator::fuse
と FusedIterator
について。
Iterator::next
メソッドの挙動には二種類のパターンがある。
None
を一度でも戻すと、その後はずっと None
のみを戻す。
これは例えば、コレクションの読取などで使われる。ここで None
は全ての要素の読取完了を表すため、それが検出された時点でイテレータはお役御免となる。
None
を戻した後でも、再び Some
を戻す場合がある。
これは例えば、通信データの読取などで使われる。ここで None
は通信終了を表すが、その後に Some
で通信再開される場合もあるため、イテレータはまだ活躍できる。
以下のアイテムにより、自作のイテレータをヒューズ形式だと宣言したり、非ヒューズ形式のイテレータをヒューズ形式に変換したりできる (これは例えば、通信データの読込イテレータを 1 ストリームの読込のみに制限できる)。
Iterator::fuse
self
を Fuse
でラップするメソッド。
Fuse<I>
イテレータを FusedIterator
にするラッパー。
FusedIterator
イテレータをヒューズ形式であると宣言するマーカートレイト。
Fuse
のラップ先が元から FusedIterator
を実装している場合、Fuse
は何もせずただラップ先に処理を転送する実装となる。この配慮により、イテレータの処理は若干だが速くなり、ループの処理速度が地味に改善される事もあるだろう。ただ、この影響で FusedIterator
と宣言したにも関わらず、実はその要件を守れていないとバグになる。