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