scala傳名調用

Scala的解釋器在解析函數參數(function arguments)時有兩種方式:函數

  • 傳值調用(call-by-value):先計算參數表達式的值,再應用到函數內部;
  • 傳名調用(call-by-name):將未計算的參數表達式直接應用到函數內部

在進入函數內部前,傳值調用方式就已經將參數表達式的值計算完畢,而傳名調用是在函數內部進行參數表達式的值計算的。code

這就形成了一種現象,每次使用傳名調用時,解釋器都會計算一次表達式的值。io

package demo

object Demo {
  def time() = {
    println("獲取時間,單位爲納秒");
    System.nanoTime();
    
  }
  def delayed( t: =>Long ) = {
    println("在 delayed 方法內");
    println("參數:"+t);
    println("llll");
    t
  }
  def main(args:Array[String]){
    delayed(time());
  }
}

以上實例中咱們聲明瞭 delayed 方法, 該方法在變量名和變量類型使用 => 符號來設置傳名調用。執行以上代碼,輸出結果以下:function

在 delayed 方法內
獲取時間,單位爲納秒
參數:562270301966829
llll
獲取時間,單位爲納秒

實例中 delay 方法打印了一條信息表示進入了該方法,接着 delay 方法打印接收到的值,最後再返回 t。變量

相關文章
相關標籤/搜索