Scala предоставляет возможность задавать значения параметров по умолчанию, что позволяет лишний раз не указывать параметры.
def log(message: String, level: String = "INFO") = println(s"$level: $message")
log("System starting") // выведет "INFO: System starting"
log("User not found", "WARNING") // выведет "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
.
Обратите внимание, что параметры по умолчанию в Scala, при вызове из Java кода, являются обязательными:
// 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); // не скомпилируется
}
}
Параметры по умолчанию для перегруженных методов
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")
.
Contributors to this page:
Contents
- Введение
- Основы
- Единобразие типов
- Классы
- Значения Параметров По умолчанию
- Именованные Аргументы
- Трейты
- Кортежи
- Композиция классов с трейтами
- Функции Высшего Порядка
- Вложенные Методы
- Множественные списки параметров (Каррирование)
- Классы Образцы
- Сопоставление с примером
- Объекты Одиночки
- Регулярные Выражения
- Объект Экстрактор
- Сложные for-выражения
- Обобщенные Классы
- Вариантность
- Верхнее Ограничение Типа
- Нижнее Ограничение Типа
- Внутренние классы
- Члены Абстрактного Типа
- Составные Типы
- Самоописываемые типы
- Контекстные параметры, также известные, как неявные параметры
- Неявные Преобразования
- Полиморфные методы
- Выведение Типа
- Операторы
- Вызов по имени
- Аннотации
- Пакеты и Импорт
- Объекты Пакета