Scala 将不可变列表添加到可变列表

Scala adding immutable list to mutable one

我正在尝试将一些用户输入 String 添加到具有尾递归的不可变 List,然后将此不可变 List 添加到已定义的 MutableList . 不知何故,这个不可变的 List 没有添加到我的 MutableList 之前。为什么会这样?

编辑:更新了代码。现在可以使用了!

val list = scala.collection.mutable.MutableList[String]()

  def exerciseSelector() {
    val user = scala.io.StdIn.readLine("go:")
    user match {
      case "add" => val tempList = scanInput(List[String]())
                    if (!tempList.isEmpty) list ++= tempList.get ; exerciseSelector()
      case "print" => println(list)
      case "exit" => sys.exit()
    }
  }

    def scanInput(acc: List[String]): Option[List[String]] = {
    val input = scala.io.StdIn.readLine("User input:")
    input match {
    case "stop" => Option(acc)
    case input: String => scanInput(input :: acc)
  }
}

exerciseSelector()

你有两个相互递归的函数 exerciseSelectorscanInput,它们只会在 scanInput return 时更新列表,最终只能在输入 "exit" 之后发生,它调用 sys.exit(),在 scanInput 的 return 发生之前完全退出,因此在 list 被更新之前。

"print" 的任何输入都将打印出一个空列表,因为如果不先调用 sys.exit(),列表永远不会有机会更新。

根据您想要实现的目标,我怀疑在接收到 "stop" 输入时放弃对 exerciseSelector() 的共同递归调用将修复您的代码(或者让您得到很多进一步达到您的预期结果)。