Рассмотрим следующий скетч для использования цикла для очистки очереди в 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: конечно, как указывает Ионут Г. Стэн, я могу пропустить сопоставление с образцом и самостоятельно разобрать возвращенную пару, например:
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)
}