1. 程式人生 > 實用技巧 >[Scala學習筆記] By-name Parameters

[Scala學習筆記] By-name Parameters

Scala By-name Parameters

原文:BY-NAME PARAMETERS in TOUR OF SCALA

By-name parameters只有被使用時才會被求值,且每次引用時都會求值。

可以理解為把by-name parameters替換為對應的表示式,它的特點與by-value parameters恰好相反。

使用=>定義by-name parameter:

def calculate(input: => Int) = input * 37
  • 優點:如果函式體中沒有用到這個引數,就不必對其求值。這種延遲引數計算時機的特點在引數計算需要大量時間時有助於程式的performance。
  • 缺點:每次使用到都需要重新求值。

例:實現一個while迴圈。

def whileLoop(condition: => Boolean)(body: => Unit): Unit =
	if (condition) {
        body
        whileLoop(condition)(body)
    }

var i = 2

whileLoop (i > 0) {
    println(i)
    i -= 1
} // prints 2 1

whileLoop方法使用兩個引數列表分別獲取條件和迴圈體。

condition = true,則body

將會被執行,接著遞迴呼叫whileLoop

condition = false,則body將不會被求值,因為我們使用了=>指定body為By-name parameter。