17

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

来自命令式世界,很难放弃可变状态。

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

4

2 回答 2

17

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

  • Scala 是一种多范式语言,它鼓励函数式编程,但将选择权留给了程序员。
  • 兼容性:许多 Java API 都公开了可变变量。
  • 性能:有时使用 var 可以为您提供最佳性能。
  • 当人们说一切都可以在没有 var 的情况下完成时,这是正确的,因为 Scala 仍然会在没有 var 的情况下完成图灵。但是,它并没有改变前面几点的有效性。
于 2012-10-27T06:06:57.763 回答
8

即使从函数式编程的角度来看,您也可以在本地使用 vars(或可变对象),前提是它们不离开定义它们的范围。

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

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

尽管这个(丑陋的)函数使用了 var,但它仍然是纯的(没有副作用,并且对于给定的参数值,它总是返回相同的结果)。

“可变状态封装”的另一个示例是参与者模型,其中参与者状态通常是可变的。

于 2012-10-27T06:55:15.817 回答