ループを使用してScalaのキューを空にするための次のスケッチを検討してください。
var queue = immutable.Queue[T]( /* .. some content ..*/ )
while( !queue.isEmpty ) {
val (record, tempQueue) = queue.dequeue
queue = tempQueue
doSomethingWith(record)
}
tempQueue
一時変数を回避し、 Scalaに返されたキュー値をループ変数に直接割り当てるためのトリックはありますqueue
か?余分なシンボルを導入しなければならないのは面倒です。さらに、おそらく余分なコピーがあるかもしれません(ただし、これは最適化される可能性がありますが、確かではありません)。
編集1:もちろん、Ionut G. Stanが指摘しているように、次のように、パターンマッチングをスキップして、返されたペアを自分で分解できます。
while( !queue.isEmpty ) {
val pair = queue.dequeue
queue = pair._2
doSomethingWith(pair._1)
}
だから私は次のように質問を洗練する必要があります:これをよりエレガントに行うためにパターンマッチングの構文糖衣を使用する方法はありますか?私はこのようなものを望んでいましたが、残念ながらコンパイルされません:
var queue = immutable.Queue[T]( /* .. some content ..*/ )
var record : A = _
while( !queue.isEmpty ) {
(record, queue) = queue.dequeue
doSomethingWith(record)
}