私が見た Scala の Iteratee パターンの 3 つの説明には、すべて 3 つの入力ケースが含まれています。たとえば、ジェームズから:
sealed trait Input[+E]
object Input {
case object EOF extends Input[Nothing]
case object Empty extends Input[Nothing]
case class El[+E](e: E) extends Input[E]
}
詳細については、James、Runar、Joshによるブログを参照してください。
私の質問は単純です: なぜ正確に空の入力ケースが必要なのですか?
iteratee パターンは、値のストリームのプロデューサーとコンシューマーの間の関係を定義します。直感的には、入力が空の場合、イテラティーを「実行」するプロデューサーは、その空のアイテムを単純に折りたたんで、空でない入力が使用可能になるまでイテラーティーを呼び出さないように思われます。
iteratees の pull ベースの類似物である、はるかによく知られているイテレータは空のケースを定義しませんが、イテレータの「内部」で要素がフィルター処理されている可能性があります。
trait Iterator[E] {
next: E // like El
hasNext: Boolean //like EOF
}
上記のすべてのブログでは、空の入力の必要性について言及していますが、完全に排除できない理由については明確に説明していません。示されているイテレータの例では、空の入力がノーオペレーションとして扱われていることに気付きました。
空の入力メッセージを解決する必要がある、もっともらしい「現実世界っぽい」問題の例をコードで示してください。