我有一個可變哈希圖的代碼,它帶有一個帶有元組的可變集合:
val field = mutable.HashMap[String, mutable.Set[(Pos3, Pos3)]]()
在 foreach 回圈中,我正在填充field
scanner.combinations(2).foreach(comb => {
val dist = s"${comb(0).dist(comb(1))}"
field = (dist -> (field.getOrElse(dist, mutable.Set()) = (comb(0), comb(1))))
}
不與訊息一起編譯:
found : aoc2021.Pos3
required: (aoc2021.Pos3, aoc2021.Pos3)
field = (dist -> (field.getOrElse(dist, mutable.Set()) = (comb(0), comb(1))))
但是,每當我(comb(0), comb(0))使用值參考元組更改裸露時:
scanner.combinations(2).foreach(comb => {
val posTuple = (comb(0),comb(1))
val dist = s"${comb(0).dist(comb(1))}"
field = (dist -> (field.getOrElse(dist, mutable.Set()) = posTuple))
}
它編譯和執行得很好。我也玩過(不可變的。)套裝:同樣的故事。PS我知道我應該使用慣用的scala并放棄副作用和foreach。
uj5u.com熱心網友回復:
請記住,當你這樣做foo = x只是糖語法foo. =(x) (即省略點和括號)
但是當你這樣做時foo = (x, y),編譯器認為你只是省略點而不是傳遞一個會產生你看到的錯誤的元組。
解決方案是使用雙括號,如:((comb(0), comb(1)))或使用->擴展方法,如:(comb(0) -> comb(1))
這是我不喜歡該語言允許的過多的糖語法的無數原因之一。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/422316.html
標籤:
