我知道 Scala 有var
(用于可变状态),但纯函数式编程不鼓励使用任何可变状态,而是专注于使用val
一切。
来自命令式世界,很难放弃可变状态。
我的问题是什么时候可以在 Scala 代码中使用 var ?真的可以只使用 val 来完成所有代码吗?如果是,那么为什么 Scala 有变量?
我知道 Scala 有var
(用于可变状态),但纯函数式编程不鼓励使用任何可变状态,而是专注于使用val
一切。
来自命令式世界,很难放弃可变状态。
我的问题是什么时候可以在 Scala 代码中使用 var ?真的可以只使用 val 来完成所有代码吗?如果是,那么为什么 Scala 有变量?
以下是 Scala 中使用 var 的一些原因:
即使从函数式编程的角度来看,您也可以在本地使用 vars(或可变对象),前提是它们不离开定义它们的范围。
例如,考虑这个(人为的)函数,它返回列表的大小:
def dumbSize( lst: List[Int] ): Int = {
var i = 0
var rest = lst
while( rest != Nil ) {
i += 1
rest = rest.tail
}
i
}
尽管这个(丑陋的)函数使用了 var,但它仍然是纯的(没有副作用,并且对于给定的参数值,它总是返回相同的结果)。
“可变状态封装”的另一个示例是参与者模型,其中参与者状态通常是可变的。