什么时候可以在Scala中使用"var"?

Sou*_*nta 16 functional-programming scala var mutable

我知道Scala有var(对于可变状态)但是纯函数式编程不鼓励使用任何可变状态,而是专注于使用val所有东西.

来自一个势在必行的世界,很难放弃可变的状态.

我的问题是什么时候可以在你的Scala代码中使用var?所有代码都可以使用val完成.如果是,那么为什么Scala有变量呢?

Kim*_*bel 15

以下是Scala中vars的一些原因:

  • Scala是一种多范式语言,它鼓励函数式编程,但它给程序员留下了选择.
  • 兼容性:许多Java API都公开了可变变量.
  • 性能:有时使用var可以获得最佳性能.
  • 当人们说一切都可以在没有变量的情况下完成时,这是正确的,因为Scala在没有变量的情况下仍然可以完成.但是,它并没有改变前几点的有效性.


par*_*tic 6

即使从函数式编程的角度来看,如果它们没有将范围保留在定义范围内,也可以在本地使用vars(或可变对象).

例如,考虑这个(人为的)函数,它返回一个列表的大小:

def dumbSize( lst: List[Int] ): Int = {
   var i = 0
   var rest = lst
   while( rest != Nil ) {
     i += 1
     rest = rest.tail
   }
   i
}
Run Code Online (Sandbox Code Playgroud)

尽管这个(丑陋的)函数使用了变量,它仍然是纯粹的(没有副作用,它总是会返回给定参数值的相同结果).

"可变状态封装"的另一个例子是演员模型,其中演员状态通常是可变的.

  • 或者只是为了证明命令式编程的错误性?;) (2认同)