最新文章

Scala笔记:def vs Val

Scala笔记: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值不同)