在调用方法时,你可以使用其参数名称标记参数,如下所示
def printName(first: String, last: String): Unit =
println(s"$first $last")
printName("John", "Public") // Prints "John Public"
printName(first = "John", last = "Public") // Prints "John Public"
printName(last = "Public", first = "John") // Prints "John Public"
printName("Elton", last = "John") // Prints "Elton John"
当两个参数具有相同类型并且参数可能被意外交换时,这非常有用。
请注意,命名参数可以按任何顺序编写。但是,一旦参数不是按从左到右的参数顺序排列,则其余参数必须命名。
在以下示例中,命名参数使中间参数可以省略。但在错误情况下,第一个参数不在顺序中,因此第二个参数必须命名。
def printFullName(first: String, middle: String = "Q.", last: String): Unit =
println(s"$first $middle $last")
printFullName(first = "John", last = "Public") // Prints "John Q. Public"
printFullName("John", last = "Public") // Prints "John Q. Public"
printFullName("John", middle = "Quincy", "Public") // Prints "John Quincy Public"
printFullName(last = "Public", first = "John") // Prints "John Q. Public"
printFullName(last = "Public", "John") // error: positional after named argument
命名参数适用于对 Java 方法的调用,但仅当所讨论的 Java 库使用 -parameters
标志编译时。