Рассмотрим следующий эскиз для использования цикла для очистки очереди в Scala:
var queue = immutable.Queue[T]( /* .. some content ..*/ )
while( !queue.isEmpty ) {
val (record, tempQueue) = queue.dequeue
queue = tempQueue
doSomethingWith(record)
}
Есть ли способ избежать временной переменной tempQueue
и заставить Scala назначить возвращаемое значение очереди непосредственно переменной цикла queue
? Необходимость вводить дополнительный символ раздражает, плюс предположительно может быть некоторое избыточное копирование (хотя это может быть оптимизировано, не уверен).
Edit 1 : конечно, как указывает Ионут Дж. Стэн, я могу пропустить сопоставление с образцом и самостоятельно разобрать возвращенную пару, как в:
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)
}