我刚刚在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))
}
}
谢谢!
答案 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
x
和y
评估为7,但每次引用x
时都会重新添加。对于y
,在定义中添加一次,而不再重复。