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

时间:2015-09-19 09:43:01

标签: list scala immutability mutable prepend

我正在尝试将一些用户输入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()

1 个答案:

答案 0 :(得分:3)

你有两个相互递归的函数exerciseSelectorscanInput,只有在scanInput返回时才会导致列表被更新,这最终只能在输入&#后发生34;退出",调用sys.exit(),在scanInput返回之前完全退出,等list更新之前。

" print"的任何输入将打印出一个空列表,因为列表永远不会在没有首先调用sys.exit()的情况下更新。

根据你想要达到的目的,我怀疑只是在收到"停止"时放弃了对exerciseSelector()的共同递归调用。输入将修复您的代码(或使您的预期结果更进一步)。