通常,函式的引數是按值引數; 也就是說,引數的值在傳遞給函式之前確定。 但是,如果我們需要編寫一個函式來接受一個表示式作為引數,我們不希望在函式呼叫之前進行評估怎麼辦? 在這種情況下,可使用Scala中提供的名稱引數。
一個按名稱機制將程式碼塊傳遞給呼叫,並且每次呼叫存取該引數時,程式碼塊被執行並且該值被計算。 在這裡,延遲列印一個訊息,表明該方法已經輸入。 接下來,延遲列印帶有其值的訊息。 最後,延遲返回't'
。
以下程式顯示如何實現按名稱呼叫函式。
object Demo {
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)
}
}
將上述程式儲存在原始檔:Demo.scala 中,使用以下命令編譯和執行此程式。
D:\software\scala-2.12.3\bin>scalac Demo.scala
D:\software\scala-2.12.3\bin>scala Demo
In delayed method
Getting time in nano seconds
Param: 11812503856935