0
我發現使用不可變List的想法成功,但是當來到這片代碼在這裏我難倒。我發現自己已經寫了比Java更多的Java而不是Scala風格。我寧願用List(...)
代替Buffer(...)
但我不知道怎樣才能通過相同的修改不可改變List
到下一個功能。 guesses
也在eliminate(...)
之內進行了修改。斯卡拉方式/成語
任何建議,以幫助我做這個做這個的斯卡拉方式表示讚賞。由於
val randomGuesses = List(...) // some long list of random integers
val guesses = randomGuesses.zipWithIndex.toBuffer
for (s <- loop()) {
val results = alphaSearch(guesses)
if (results.size == 1) {
guesses(resultes.head._2) = results.head._1
eliminate(guesses, resultes.head._2)
}
else {
val results = betaSearch(guesses)
if (results.size == 1) {
guesses(resultes.head._2) = results.head._1
eliminate(guesses, resultes.head._2)
} else {
val results = betaSearch(guesses)
if (results.size == 1) {
guesses(resultes.head._2) = results.head._1
eliminate(guesses, resultes.head._2)
}
}
}
}
對於模式匹配的情況,更好的辦法是嘗試'結果匹配{case x :: Nil => //代碼在if塊中。我認爲匹配列表本身的結構比檢查大小更清晰,它使您能夠立即訪問列表的(單個)元素。 – 2013-05-01 16:33:23
匹配不能解決我的多重嵌套的if-s,並且從elminate創建一個新的List不起作用,因爲我將在for循環中再次使用猜測。對不起,我錯過了for循環,我已經修改我的代碼,以反映 – thlim 2013-05-01 17:42:35
您可以使用替代'如果-else'語句與'match',然後重構。您可以使用遞歸而不是使用for循環。從'removed'中返回一個新的'List',並用新的列表調用你的函數。 – Brian 2013-05-01 18:13:15