我正在尝试将一些用户输入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()
答案 0 :(得分:3)
你有两个相互递归的函数exerciseSelector
和scanInput
,只有在scanInput
返回时才会导致列表被更新,这最终只能在输入&#后发生34;退出",调用sys.exit()
,在scanInput
返回之前完全退出,等list
更新之前。
" print"的任何输入将打印出一个空列表,因为列表永远不会在没有首先调用sys.exit()
的情况下更新。
根据你想要达到的目的,我怀疑只是在收到"停止"时放弃了对exerciseSelector()
的共同递归调用。输入将修复您的代码(或使您的预期结果更进一步)。