我知道 Scala 有var(对于可变状态)但是纯函数式编程不鼓励使用任何可变状态,而是专注于使用val来处理所有事情。
var
val
来自一个势在必行的世界,很难放弃可变的状态。
我的问题是什么时候可以在你的 Scala 代码中使用 var?所有代码都可以使用 val 完成。如果是,那么为什么 Scala 有变量呢?
以下是 Scala 中 vars 的一些原因:
Scala 是一种 multi-paradigm 语言,它鼓励函数式编程,但它给程序员留下了选择。
兼容性:许多 Java API 都公开了可变变量。
性能:有时使用 var 可以获得最佳性能。
当人们说一切都可以在没有变量的情况下完成时,这是正确的,因为 Scala 在没有变量的情况下仍然可以完成。但是,它并没有改变前几点的有效性。
即使从函数式编程的角度来看,如果它们没有将范围保留在定义范围内,也可以在本地使用 vars(或可变对象)。
例如,考虑这个(人为的)函数,它返回一个列表的大小:
def dumbSize( lst: List[Int] ): Int = { var i = 0 var rest = lst while( rest != Nil ) { i += 1 rest = rest.tail } i }
尽管这个(丑陋的)函数使用了变量,它仍然是纯粹的(没有副作用,它总是会返回给定参数值的相同结果)。
“mutable-state-encapsulation”的另一个例子是演员模型,其中演员状态通常是可变的。
2 回答
以下是 Scala 中 vars 的一些原因:
Scala 是一种 multi-paradigm 语言,它鼓励函数式编程,但它给程序员留下了选择。
兼容性:许多 Java API 都公开了可变变量。
性能:有时使用 var 可以获得最佳性能。
当人们说一切都可以在没有变量的情况下完成时,这是正确的,因为 Scala 在没有变量的情况下仍然可以完成。但是,它并没有改变前几点的有效性。
即使从函数式编程的角度来看,如果它们没有将范围保留在定义范围内,也可以在本地使用 vars(或可变对象)。
例如,考虑这个(人为的)函数,它返回一个列表的大小:
尽管这个(丑陋的)函数使用了变量,它仍然是纯粹的(没有副作用,它总是会返回给定参数值的相同结果)。
“mutable-state-encapsulation”的另一个例子是演员模型,其中演员状态通常是可变的。