Scala函數按名稱調用
通常情況下,函數的參數是傳值參數;即,參數的值在它被傳遞給函數之前被確定。但是,如果我們需要編寫一個接收參數不希望馬上計算,直到調用函數內的表達式。對於這種情況,Scala提供按名稱參數調用函數。
按名稱調用機製傳遞一個代碼塊給被調用者並且每次被調用方傳接入參數,代碼塊被執行,值被計算。
object Test { def main(args: Array[String]) { delayed(time()); } def time() = { println("Getting time in nano seconds") System.nanoTime } def delayed( t: => Long ) = { println("In delayed method") println("Param: " + t) t } }
在這裡,我們聲明delayed方法,它通過=>符號變量的名稱和類型,需要一個按名稱調用參數。當上述代碼被編譯和執行時,它產生了以下結果:
C:/>scalac Test.scala C:/>scala Test In delayed method Getting time in nano seconds Param: 81303808765843 Getting time in nano seconds C:/>
這裡,delayed打印的消息聲明,該方法已被輸入。接下來,delayed打印一個與其消息的值。最後delayed方法返回 t。