在Scala

时间:2016-11-04 05:10:56

标签: scala

我刚刚在Scala中新建,我知道Scala有三个关键字来声明变量:

def defines a method
val defines a fixed value (which cannot be modified)
var defines a variable (which can be modified)

我打算用匿名方法编写一些代码进行测试。

object Anonymous {
  def main(args: Array[String]): Unit = {
    def double_1 = (i: Int) => { i * 2 }
    val double_2 = (i: Int) => { i * 2 }
    var double_3 = (i: Int) => { i * 2 }
    println(double_1(2))
    println(double_2(2))
    println(double_3(2))
  }
}
  • 当我使用double_1,double_2,double_3时,上述三种方式有什么区别?
  • 内存段必须存储变量是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

首先,它们不是匿名方法。它们是函数,它们每个都有一个名字,所以它们不是匿名的。

它们之间的主要区别在于double_3可以重新分配给某个不同的函数值。

var double_3 = (i: Int) => { i * 2 }
double_3 = (i: Int) => i + 3  // the compiler allows this

其他人不能。

将函数定义为def会很不寻常。 def主要用于声明方法,因为每次引用时都会重新评估def

def x = 3 + 4
val y = 3 + 4

xy评估为7,但每次引用x时都会重新添加。对于y,在定义中添加一次,而不再重复。