考虑以下使用循环在 Scala 中清空队列的草图:
var queue = immutable.Queue[T]( /* .. some content ..*/ )
while( !queue.isEmpty ) {
val (record, tempQueue) = queue.dequeue
queue = tempQueue
doSomethingWith(record)
}
有什么技巧可以避免临时变量tempQueue
并让 Scala 将返回的 Queue 值直接分配给循环变量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)
}