1
val i = (1 to 8).toIterator
val oneToThree = i.takeWhile(_ <= 3).toList
// List(1, 2, 3)
これまでのところとても良いです。 は、今私は、イテレータはまだ(3, 4, 5, 6, 7, 8)
を含むようにしたいが、私は上で運ぶ場合:Scala Iterator.takeWhileが失敗した要素を破棄しています
val fourToSix = i.takeWhile(_ <= 6).toList
// List(5, 6)
エレメント3行方不明になっています。私はfourToSix
がList(4, 5, 6)
であることが好ましいと思います。 takeWhile
などの操作を使用するにはどうすればよいですか?
だから私はIteratorを拡張するクラスを書いています。私は内部イテレータ(この例では 'i'に似ています)をオーバーライドした' next() 'で' i.takeWhile'を呼び出しています... 'i'を' var ' '私はspanを呼び出した後に' rest'に更新できますか? – Tom
'var'への再割り当てがうまくいかないようだが、私はますます増え続けるイテレータのスタックを持っていて、' next'を呼び出すのが徐々に遅くなっている。 – Tom
@Tom実際には、その場合、 'hasNext'と' next'を使って 'takeWhile'を自分で実装してみることをお勧めします。問題のコードがうまくいかない本当の理由は、イテレータから要素を取得した後、イテレータに戻すことができず、次の要素を「覗く」ためのインタフェースがないことです。したがって、オプションの現在の要素で内部変数を維持し、その述語に失敗した要素をその内部に配置する必要があります。詳細な情報がなくても詳細な回答は難しいので、このマニュアルの実装がうまくいかない場合は、より一般的な別の質問をすることを検討することもできます。 – Kolmar