Scala - 按名呼叫函式



通常,函式的引數是按值傳遞的引數;也就是說,引數的值在傳遞給函式之前就已經確定。但是,如果我們需要編寫一個函式,該函式接受一個引數,我們不希望在函式內部呼叫之前對該引數進行求值,該怎麼辦?在這種情況下,Scala 提供了**按名呼叫**引數。

按名呼叫的機制將程式碼塊傳遞給呼叫,並且每次呼叫訪問引數時,都會執行程式碼塊並計算其值。這裡,`delayed` 列印一條訊息,表明該方法已進入。接下來,`delayed` 列印一條包含其值的訊息。最後,`delayed` 返回 '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**。使用以下命令編譯並執行此程式。

命令

\>scalac Demo.scala
\>scala Demo

輸出

In delayed method                                                             
Getting time in nano seconds                                                  
Param: 2027245119786400 
scala_functions.htm
廣告