09 Apr 2017
1 分钟阅读
Scala笔记:def vs ValScala笔记:def VS val
先说原理:
val修饰的在定义的时候执行
def修饰的在调用的时候执行
直观的例子:
//注释的行为REPL输出
def test: () => Int = {
println("def called")
val r = util.Random.nextInt
() => r
}
//test: () => Int
test()
//def called
//res82: Int = -950077410
test()
//def called
//res83: Int = 1027028032
val test: () => Int = {
println("def called")
val r = util.Random.nextInt
() => r
}
//def called
//test: () => Int = $$Lambda$1382/338526071@42f2515d
test()
//res84: Int = 300588352
test()
//res84: Int = 300588352
def在方法定义的时候除了新的方法没有任何输出;之后每次调用的时候都会执行一次,而且是每次调用都获得一个新的方法(random值不同)