При вызове методов можно конкретно указывать название задаваемого аргумента следующим образом:
def printName(first: String, last: String): Unit = println(s"$first $last") printName("John", "Public") // выводит "John Public" printName(first = "John", last = "Public") // выводит "John Public" printName(last = "Public", first = "John") // выводит "John Public" printName("Elton", last = "John") // выводит "Elton John"
Это полезно, когда два параметра имеют один и тот же тип и аргументы могут быть случайно перепутаны.
Обратите внимание, что именованные аргументы могут быть указаны в любом порядке. Однако, если аргументы расположены не в порядке параметров метода (читается слева направо), остальные аргументы должны быть названы.
В следующем примере именованные аргументы позволяют опустить параметр middle
. В случае ошибки, если первый аргумент не на своем месте, необходимо будет указать второй аргумент.
def printFullName(first: String, middle: String = "Q.", last: String): Unit = println(s"$first $middle $last") printFullName(first = "John", last = "Public") // выводит "John Q. Public" printFullName("John", last = "Public") // выводит "John Q. Public" printFullName("John", middle = "Quincy", "Public") // выводит "John Quincy Public" printFullName(last = "Public", first = "John") // выводит "John Q. Public" printFullName(last = "Public", "John") // ошибка: позиция после именованного аргумента
Именованные аргументы работают при вызове Java методов, но только в том случае, если используемая Java библиотека была скомпилирована с флагом -parameters
.