Значения Параметров По умолчанию
Info: JavaScript is currently disabled, code tabs will still work, but preferences will not be remembered.
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-выражения
- Обобщенные Классы
- Вариантность
- Верхнее Ограничение Типа
- Нижнее Ограничение Типа
- Внутренние классы
- Члены Абстрактного Типа
- Составные Типы
- Самоописываемые типы
- Контекстные параметры, также известные, как неявные параметры
- Неявные Преобразования
- Полиморфные методы
- Выведение Типа
- Операторы
- Вызов по имени
- Аннотации
- Пакеты и Импорт
- Объекты Пакета