首页 文章

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

提问于
浏览
16

我知道 Scala 有var(对于可变状态)但是纯函数式编程不鼓励使用任何可变状态,而是专注于使用val来处理所有事情。

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

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

2 回答

  • 15

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

    • Scala 是一种 multi-paradigm 语言,它鼓励函数式编程,但它给程序员留下了选择。

    • 兼容性:许多 Java API 都公开了可变变量。

    • 性能:有时使用 var 可以获得最佳性能。

    • 当人们说一切都可以在没有变量的情况下完成时,这是正确的,因为 Scala 在没有变量的情况下仍然可以完成。但是,它并没有改变前几点的有效性。

  • 6

    即使从函数式编程的角度来看,如果它们没有将范围保留在定义范围内,也可以在本地使用 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”的另一个例子是演员模型,其中演员状态通常是可变的。

相关问题