日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Scala 函数传名调用(call-by-name)

發布時間:2024/1/23 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。