我试图将一些用户输入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()
你有两个相互递归的函数exerciseSelector
和scanInput
,它们只会在scanInput
返回时才会导致列表更新,这最终只能在输入"exit"之后发生,它调用sys.exit()
,在scanInput
返回之前退出,因此在list
被更新之前。
任何输入"print"将打印出一个空列表,因为如果不首先调用sys.exit()
,列表永远没有机会更新。
根据您想要实现的目标,我怀疑只是在接收"停止"输入时放弃对exerciseSelector()
的共递归调用将修复您的代码(或让您进一步接近预期的结果)。