Вызов параметров по имени - это когда значение параметра вычисляется только в момент вызова параметра. Этот способ противоположен вызову по значению. Чтоб вызов параметра был по имени, необходимо просто указать =>
перед его типом.
def calculate(input: => Int) = input * 37
Преимущество вызова параметров по имени заключается в том, что они не вычисляются если не используются в теле функции. С другой стороны плюсы вызова параметров по значению в том, что они вычисляются только один раз.
Вот пример того, как мы можем реализовать условный цикл:
def whileLoop(condition: => Boolean)(body: => Unit): Unit =
if (condition) {
body
whileLoop(condition)(body)
}
var i = 2
whileLoop (i > 0) {
println(i)
i -= 1
} // выведет 2 1
def whileLoop(condition: => Boolean)(body: => Unit): Unit =
if condition then
body
whileLoop(condition)(body)
var i = 2
whileLoop (i > 0) {
println(i)
i -= 1
} // выведет 2 1
Метод whileLoop
использует несколько списков параметров - условие и тело цикла. Если condition
является верным, выполняется body
, а затем выполняется рекурсивный вызов whileLoop. Если condition
является ложным, то тело никогда не вычисляется, тк у нас стоит =>
перед типом body
.
Теперь, когда мы передаем i > 0
как наше условие condition
и println(i); i-= 1
как тело body
, код ведет себя также как обычный цикл в большинстве языков программирования.
Такая возможность откладывать вычисления параметра до его использования может помочь повысить производительность, отсекая не нужные вычисления при определенных условиях.
Contributors to this page:
Contents
- Введение
- Основы
- Единобразие типов
- Классы
- Значения Параметров По умолчанию
- Именованные Аргументы
- Трейты
- Кортежи
- Композиция классов с трейтами
- Функции Высшего Порядка
- Вложенные Методы
- Множественные списки параметров (Каррирование)
- Классы Образцы
- Сопоставление с примером
- Объекты Одиночки
- Регулярные Выражения
- Объект Экстрактор
- Сложные for-выражения
- Обобщенные Классы
- Вариантность
- Верхнее Ограничение Типа
- Нижнее Ограничение Типа
- Внутренние классы
- Члены Абстрактного Типа
- Составные Типы
- Самоописываемые типы
- Контекстные параметры, также известные, как неявные параметры
- Неявные Преобразования
- Полиморфные методы
- Выведение Типа
- Операторы
- Вызов по имени
- Аннотации
- Пакеты и Импорт
- Объекты Пакета