在高阶函数scala中改变状态的功能方法
Functional way to mutate state inside higher order functions scala
考虑以下代码,
1 var ip = ArrayBuffer[String]()
2 ip += "1"
3 println(ip)
4 ip.clear()
5 (1 to 10).foreach(ip += ("1"))
6 println(ip)
此处第 5 行在高阶函数中使用变量 ip
导致异常。我知道使用 var
是不可取的,但我想知道如何在高阶函数中使用 vars。或者是否有替代 mange state 的方法。
以下作品:
(1 to 10).foreach(_ => ip += "1")
foldLeft 更实用,您可以省去可变状态:
(1 to 10).foldLeft(List.empty[String]){
case (acc, _) => "1" :: acc
}
输出:
List[String] = List(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
考虑以下代码,
1 var ip = ArrayBuffer[String]()
2 ip += "1"
3 println(ip)
4 ip.clear()
5 (1 to 10).foreach(ip += ("1"))
6 println(ip)
此处第 5 行在高阶函数中使用变量 ip
导致异常。我知道使用 var
是不可取的,但我想知道如何在高阶函数中使用 vars。或者是否有替代 mange state 的方法。
以下作品:
(1 to 10).foreach(_ => ip += "1")
foldLeft 更实用,您可以省去可变状态:
(1 to 10).foldLeft(List.empty[String]){
case (acc, _) => "1" :: acc
}
输出:
List[String] = List(1, 1, 1, 1, 1, 1, 1, 1, 1, 1)