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



我试图将一些用户输入String s添加到具有尾部递归的不可变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返回时才会导致列表更新,这最终只能在输入"exit"之后发生,它调用sys.exit(),在scanInput返回之前退出,因此在list被更新之前。

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

根据您想要实现的目标,我怀疑只是在接收"停止"输入时放弃对exerciseSelector()的共递归调用将修复您的代码(或让您进一步接近预期的结果)。

相关内容

  • 没有找到相关文章

最新更新