Scala 函数传名调用(call-by-name)
生活随笔
收集整理的這篇文章主要介紹了
Scala 函数传名调用(call-by-name)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Scala的解釋器在解析函數參數(function arguments)時有兩種方式:
- 傳值調用(call-by-value):先計算參數表達式的值,再應用到函數內部;
- 傳名調用(call-by-name):將未計算的參數表達式直接應用到函數內部
在進入函數內部前,傳值調用方式就已經將參數表達式的值計算完畢,而傳名調用是在函數內部進行參數表達式的值計算的。
這就造成了一種現象,每次使用傳名調用時,解釋器都會計算一次表達式的值。
object Test {def main(args: Array[String]) {delayed(time());}def time() = {println("獲取時間,單位為納秒")System.nanoTime}def delayed( t: => Long ) = {println("在 delayed 方法內")println("參數: " + t)t} }以上實例中我們聲明了 delayed 方法,該方法在變量名和變量類型使用 => 符號來設置傳名調用。執行以上代碼,輸出結果如下:
$ scalac Test.scala $ scala Test 在 delayed 方法內 獲取時間,單位為納秒 參數: 241550840475831 獲取時間,單位為納秒實例中 delay 方法打印了一條信息表示進入了該方法,接著 delay 方法打印接收到的值,最后再返回 t。
總結
以上是生活随笔為你收集整理的Scala 函数传名调用(call-by-name)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习笔记(八)类(class
- 下一篇: python学习笔记(十)标准库ppri