При вызове методов можно конкретно указывать название задаваемого аргумента следующим образом:
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
.
Contributors to this page:
Contents
- Введение
- Основы
- Единобразие типов
- Классы
- Значения Параметров По умолчанию
- Именованные Аргументы
- Трейты
- Кортежи
- Композиция классов с трейтами
- Функции Высшего Порядка
- Вложенные Методы
- Множественные списки параметров (Каррирование)
- Классы Образцы
- Сопоставление с примером
- Объекты Одиночки
- Регулярные Выражения
- Объект Экстрактор
- Сложные for-выражения
- Обобщенные Классы
- Вариантность
- Верхнее Ограничение Типа
- Нижнее Ограничение Типа
- Внутренние классы
- Члены Абстрактного Типа
- Составные Типы
- Самоописываемые типы
- Контекстные параметры, также известные, как неявные параметры
- Неявные Преобразования
- Полиморфные методы
- Выведение Типа
- Операторы
- Вызов по имени
- Аннотации
- Пакеты и Импорт
- Объекты Пакета