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。
相關文章
- JDBC 教程
- JDBC Statement, PreparedStatement 和 CallableStatement
- JDBC ResultSet 結果集
- JDBC CallableStatement 使用范例
- JDBC 事務
- JDBC 事務保存點范例
- JDBC 創建數據庫范例
- Hibernate 教程
- Hibernate 架構
- Hibernate 持久化類
- Hibernate 映射
- Hibernate 攔截器
- Maven 自動化部署
- Gson class
- Scala 訪問修飾符
- Scala 運算符
- Scala 閉包
- Spring IoC容器
- Spring 依賴注入
- Spring Angular CRUD應用程序