Scala 函數(shù)傳名調(diào)用(call-by-name)
Scala 函數(shù)傳名調(diào)用(call-by-name)
Scala的解釋器在解析函數(shù)參數(shù)(function arguments)時有兩種方式:
- 傳值調(diào)用(call-by-value):先計算參數(shù)表達式的值,再應(yīng)用到函數(shù)內(nèi)部;
- 傳名調(diào)用(call-by-name):將未計算的參數(shù)表達式直接應(yīng)用到函數(shù)內(nèi)部
在進入函數(shù)內(nèi)部前,傳值調(diào)用方式就已經(jīng)將參數(shù)表達式的值計算完畢,而傳名調(diào)用是在函數(shù)內(nèi)部進行參數(shù)表達式的值計算的。
這就造成了一種現(xiàn)象,每次使用傳名調(diào)用時,解釋器都會計算一次表達式的值。
object Test { def main(args: Array[String]) { delayed(time()); } def time() = { println("獲取時間,單位為納秒") System.nanoTime } def delayed( t: => Long ) = { println("在 delayed 方法內(nèi)") println("參數(shù): " + t) t } }
以上范例中我們聲明了 delayed 方法, 該方法在變量名和變量類型使用 => 符號來設(shè)置傳名調(diào)用。執(zhí)行以上代碼,輸出結(jié)果如下:
$ scalac Test.scala $ scala Test 在 delayed 方法內(nèi) 獲取時間,單位為納秒 參數(shù): 241550840475831 獲取時間,單位為納秒
范例中 delay 方法打印了一條信息表示進入了該方法,接著 delay 方法打印接收到的值,最后再返回 t。
相關(guān)文章
- JDBC 教程
- JDBC Statement, PreparedStatement 和 CallableStatement
- JDBC ResultSet 結(jié)果集
- JDBC CallableStatement 使用范例
- JDBC 事務(wù)
- JDBC 事務(wù)保存點范例
- JDBC 創(chuàng)建數(shù)據(jù)庫范例
- Hibernate 教程
- Hibernate 架構(gòu)
- Hibernate 持久化類
- Hibernate 映射
- Hibernate 攔截器
- Maven 自動化部署
- Gson class
- Scala 訪問修飾符
- Scala 運算符
- Scala 閉包
- Spring IoC容器
- Spring 依賴注入
- Spring Angular CRUD應(yīng)用程序