scala函數(shù)的參數(shù)可以是一般的數(shù)值掌桩,也可以是一個函數(shù)。例如:
scala> def time() = {
| println("Getting time in nano seconds")
| System.nanoTime
| }
time: ()Long
scala> def delayed(t: Long)={
| println("In delayed method")
| println("Param: " + t)
| }
delayed: (t: Long)Unit
scala> delayed(time())
Getting time in nano seconds //先執(zhí)行了time函數(shù)
In delayed method
Param: 31173999406389
從結(jié)果的打印可以看到斋枢,在向delayed函數(shù)傳入time函數(shù)的時候就已經(jīng)調(diào)用了time函數(shù)已维,所以先打印了Getting time in nano seconds
。但是開發(fā)者往往是想在真正使用的時候才去執(zhí)行計算阔墩,所以scala提供了一種By-Name參數(shù)形式嘿架,即參數(shù)定義的時候使用t: =>
的形式,例如:
scala> def delayed(t: =>Long)={ //注意:和=>之間一定要有空格
| println("In delayed method")
| println("Param: " + t)
| }
delayed: (t: => Long)Unit
scala> delayed(time())
In delayed method //先執(zhí)行的delayed戈擒,再調(diào)用的time
Getting time in nano seconds
Param: 31694489357969