通常,函數的參數是按值參數; 也就是說,參數的值在傳遞給函數之前確定。 但是,如果我們需要編寫一個函數來接受一個運算式作為參數,我們不希望在函數調用之前進行評估怎麼辦? 在這種情況下,可使用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