Scala 我将在函数中更新一些集合 我将把一些集合作为参数放入函数中,并更新这些集合
查看注释lins,这里将出现一个错误:重新分配到val。如何解决这个问题,函数参数似乎是值,而不是变量Scala 我将在函数中更新一些集合 我将把一些集合作为参数放入函数中,并更新这些集合,scala,Scala,查看注释lins,这里将出现一个错误:重新分配到val。如何解决这个问题,函数参数似乎是值,而不是变量 你说得对。函数参数被视为VAL,因此不支持重新分配。不支持var参数 您可以做的是创建var容器,然后将lob和pagesoflob中的元素复制到这些容器中。然后,您可以根据需要重新分配。问题是您无法更新传入的集合,因此必须返回一个结果 例如: def doSomething(xs: List[Int]): List[Int] = { var result = xs for (i &l
你说得对。函数参数被视为VAL,因此不支持重新分配。不支持var参数 您可以做的是创建var容器,然后将lob和pagesoflob中的元素复制到这些容器中。然后,您可以根据需要重新分配。问题是您无法更新传入的集合,因此必须返回一个结果 例如:
def doSomething(xs: List[Int]): List[Int] = {
var result = xs
for (i <- 1 to 5) {
result = result :+ i // Create new list on every iteration
}
return result
}
println(doSomething(List(1, 2, 3, 4, 5)))
// List(1, 2, 3, 4, 5, 1, 2, 3, 4, 5)
有很多更好的、惯用的方法,但如果您希望保持命令式方法,就可以使用这种方法
我将把一些集合作为参数放入函数中,并更新这些集合
那真是个坏主意
在学习Scala和函数编程时,学生应该避免坏习惯,如可变数据、返回单元的函数、foreach循环和其他依赖于副作用的构造
因此,该方法应该在内部构建和填充集合,并将它们作为3元素元组(也称为三元组)返回,而不是传递无法完成的可变集合
方法签名可能如下所示
def wrapEmailRportData(jsonString :String) :(List[String]
,Map[String,List[String]]
,Map[String,List[(String,List[Map[String,String]])]]
) = { . . .
val (lobs, pagesOfLob, summariesByPosOfLob) = wrapEmailRportData(jsonStr)
你可以这样调用它
def wrapEmailRportData(jsonString :String) :(List[String]
,Map[String,List[String]]
,Map[String,List[(String,List[Map[String,String]])]]
) = { . . .
val (lobs, pagesOfLob, summariesByPosOfLob) = wrapEmailRportData(jsonStr)
至于方法体,我确信返回元素都可以在不使用可变集合的情况下构建。从学习foldLeft开始,了解它的工作原理。你说得对,非常感谢你的专业回答。