9

私が見た 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]
}

詳細については、JamesRunarJoshによるブログを参照してください。

私の質問は単純です: なぜ正確に空の入力ケースが必要なのですか?

iteratee パターンは、値のストリームのプロデューサーとコンシューマーの間の関係を定義します。直感的には、入力が空の場合、イテラティーを「実行」するプロデューサーは、その空のアイテムを単純に折りたたんで、空でない入力が使用可能になるまでイテラーティーを呼び出さないように思われます。

iteratees の pull ベースの類似物である、はるかによく知られているイテレータは空のケースを定義しませんが、イテレータの「内部」で要素がフィルター処理されている可能性があります。

trait Iterator[E] {
    next: E        // like El
    hasNext: Boolean  //like EOF
}

上記のすべてのブログでは、空の入力の必要性について言及していますが、完全に排除できない理由については明確に説明していません。示されているイテレータの例では、空の入力がノーオペレーションとして扱われていることに気付きました。

空の入力メッセージを解決する必要がある、もっともらしい「現実世界っぽい」問題の例をコードで示してください。

4

2 に答える 2

2

James Roperは、私が興味深いと思ったこのスニペットを含めて、ここで有用な応答をしました。

実装できる別の方法は、Option[Input] を Done の残りの入力として使用することだと思います。これにより、空を処理する必要がないため、イテレートの実装が簡単になります。

于 2013-07-03T03:38:11.653 に答える