Scala 巡禮

依名稱參數

語言

依名稱參數每次使用時都會評估。如果沒有使用,則完全不會評估。這類似於使用傳遞的表達式取代依名稱參數。它們與依值參數相反。若要建立一個依名稱參數,只要在其類型前加上 => 即可。

def calculate(input: => Int) = input * 37

依名稱參數的優點是,如果它們未用於函式主體中,則不會評估它們。另一方面,依值參數的優點是它們只評估一次。

以下是我們如何實作 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
def whileLoop(condition: => Boolean)(body: => Unit): Unit =
  if condition then
    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 的類型前加上 =>

現在,當我們傳遞 i > 0 作為我們的 condition,以及 println(i); i-= 1 作為 body 時,它會像許多語言中的標準 while 迴圈一樣運作。

延遲評估參數直到使用它的能力,如果參數在評估上需要大量運算或像擷取 URL 這樣執行時間較長的程式碼區塊,則有助於提升效能。

此頁面的貢獻者