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

vjrehmav  于 2022-12-23  发布在  Scala
关注(0)|答案(2)|浏览(124)

我知道Scala有var(用于可变状态),但是纯函数式编程不鼓励使用任何可变状态,而是专注于使用val来处理所有事情。
来自一个命令式的世界,很难放弃可变的状态。
我的问题是什么时候可以在Scala代码中使用var?真的可以只用瓦尔来完成所有代码吗?如果可以,那么为什么Scala要使用var?

ni65a41a

ni65a41a1#

以下是Scala中使用var的一些原因:

  • Scala是一种多范式语言,它鼓励函数式编程,但它把选择权留给了程序员。
  • 兼容性:许多Java API公开可变变量。
  • 性能:有时候使用var会给你带来最好的性能。
  • 当人们说没有变量什么都可以做时,这是正确的,因为Scala在没有变量的情况下仍然是完整的,但是这并没有改变前面几点的有效性。
iugsix8n

iugsix8n2#

即使从函数式编程的Angular 来看,也可以在本地使用vars(或可变对象),只要它们不离开定义它们的作用域。
例如,考虑这个(人为的)函数,它返回列表的大小:

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

虽然这个(丑陋的)函数使用了vars,但它仍然是纯函数,没有副作用,而且对于给定的参数值,它总是返回相同的结果。
“可变状态封装”的另一个示例是参与者模型,其中参与者状态通常是可变的。

相关问题