Scala按名稱呼叫函式

2019-10-16 23:14:32

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