# 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 教程
- Scala 簡介
- Scala 安裝
- Scala 基礎語法
- Scala 數據類型
- Scala 變量
- Scala 訪問修飾符
- Scala 運算符
- Scala IF...ELSE 語句
- Scala 循環
- Scala while 循環
- Scala do...while 循環
- Scala do...while 循環
- Scala break 語句
- Scala 函數
- Scala 函數傳名調用(call-by-name)
- Scala 指定函數參數名
- Scala 函數 - 可變參數
- Scala 遞歸函數
- Scala 高階函數
- Scala 函數嵌套
- Scala 匿名函數
- Scala 偏應用函數
- Scala 函數柯里化(Currying)
- Scala 閉包
- Scala 字符串
- Scala 數組
- Scala Collection
- Scala List(列表)
- Scala Set(集合)
- Scala Map(映射)
- Scala 元組
- Scala Option(選項)
- Scala Iterator(迭代器)
- Scala 類和對象
- Scala Trait(特征)
- Scala 模式匹配
- Scala 正則表達式
- Scala 異常處理
- Scala 提取器(Extractor)
- Scala 文件 I/O