0

我发现使用不可变列表的想法取得了成功,但是当来到这里的这段代码时,我感到很困惑。我发现自己写的东西更像是 Java 而不是 Scala 风格。我更愿意使用List(...)而不是,Buffer(...)但我不知道如何将相同的修改不可变List传递给下一个函数。guesses也在eliminate(...).

任何可以帮助我使其成为 Scala 方式的建议都值得赞赏。谢谢

    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)  
          }
      }
    }
}
4

1 回答 1

1

这里有一些一般提示,因为这可能更适合代码审查,并且发布的代码不完整,没有示例。

您可以使用模式匹配代替ifandelse来检查大小。

results.size match{
  case 1 => ... //Code in the if block
  case _ => ... //Code in the else block
}

而不是变异guesses创建一个新的List.

val newGuesses = ...

然后newGuesses传入eliminate.

最后,它看起来像eliminate修改了guesses. 更改此项以返回新列表。例如

def eliminate(list: List[Int]) = {
 //Eliminate something from list and return a new `List`
}
于 2013-05-01T16:15:13.763 回答