考慮使用一個循環來清空隊列中斯卡拉以下草圖:Scala:是否需要處理元組返回值的臨時變量?
var queue = immutable.Queue[T](/* .. some content ..*/)
while(!queue.isEmpty) {
val (record, tempQueue) = queue.dequeue
queue = tempQueue
doSomethingWith(record)
}
有沒有辦法來避免臨時變量tempQueue
並獲得斯卡拉返回隊列值直接分配給循環變量queue
?不得不介紹額外的符號是煩人的,加上大概可能會有一些多餘的複製(儘管這可能會得到優化,不知道)。
編輯1:當然,作爲約努茨G.斯坦指出,我可以跳過模式匹配和拆開返回的對自己,如:
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)
}
上面這個SO的簡化例子的問題是,實際上你經常想做一些更復雜的事情,比如沒有完全排空隊列(在這種情況下,for循環將不起作用)。你提出的我猜想的匹配實際上等同於我所使用的代碼,它仍然使用臨時變量(我更新了我的問題以舉例說明我期望的內容:-)。我想答案可能是沒有辦法做到這一點,因爲我似乎無法將模式匹配結果提取到已經存在的變量中,只能將它們提取到新定義的變量中。 – 2011-12-20 14:35:06
不幸的是,您提供的相關問題的鏈接似乎也是這個問題的(否定)答案。我會接受你的回答。謝謝! – 2011-12-20 14:39:48