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