[Scala學習筆記] By-name Parameters
阿新 • • 發佈:2020-07-30
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。