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()
你有两个相互递归的函数 exerciseSelector
和 scanInput
,它们只会在 scanInput
return 时更新列表,最终只能在输入 "exit" 之后发生,它调用 sys.exit()
,在 scanInput
的 return 发生之前完全退出,因此在 list
被更新之前。
"print" 的任何输入都将打印出一个空列表,因为如果不先调用 sys.exit()
,列表永远不会有机会更新。
根据您想要实现的目标,我怀疑在接收到 "stop" 输入时放弃对 exerciseSelector()
的共同递归调用将修复您的代码(或者让您得到很多进一步达到您的预期结果)。
我正在尝试将一些用户输入 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()
你有两个相互递归的函数 exerciseSelector
和 scanInput
,它们只会在 scanInput
return 时更新列表,最终只能在输入 "exit" 之后发生,它调用 sys.exit()
,在 scanInput
的 return 发生之前完全退出,因此在 list
被更新之前。
"print" 的任何输入都将打印出一个空列表,因为如果不先调用 sys.exit()
,列表永远不会有机会更新。
根据您想要实现的目标,我怀疑在接收到 "stop" 输入时放弃对 exerciseSelector()
的共同递归调用将修复您的代码(或者让您得到很多进一步达到您的预期结果)。