Scala 導覽

預設參數值

語言

Scala 提供了賦予參數預設值的可能性,可讓呼叫者省略這些參數。

def log(message: String, level: String = "INFO") = println(s"$level: $message")

log("System starting")  // prints INFO: System starting
log("User not found", "WARNING")  // prints WARNING: User not found

參數 level 有預設值,所以它是選用的。在最後一行,參數 "WARNING" 覆寫了預設參數 "INFO"。在 Java 中,您可能會使用多載方法,您可以使用具有選用參數的方法來達成相同的效果。但是,如果呼叫者省略參數,任何後續參數都必須命名。

class Point(val x: Double = 0, val y: Double = 0)

val point1 = new Point(y = 1)

在這裡,我們必須說 y = 1

請注意,當從 Java 程式碼呼叫時,Scala 中的預設參數並非選用的

// Point.scala
class Point(val x: Double = 0, val y: Double = 0)
// Main.java
public class Main {
    public static void main(String[] args) {
        Point point = new Point(1);  // does not compile
    }
}

多載方法的預設參數

Scala 不允許兩個具有預設參數且名稱相同(多載)的方法。一個重要的原因是避免因預設參數的存在而造成的歧義。為了說明這個問題,我們考慮以下提供的宣告方法

object A {
  def func(x: Int = 34): Unit
  def func(y: String = "abc"): Unit
}
object A:
  def func(x: Int = 34): Unit
  def func(y: String = "abc"): Unit

如果我們呼叫 A.func(),編譯器無法知道程式設計師打算呼叫 func(x: Int = 34) 還是 func(y: String = "abc")

此頁面的貢獻者