Неявные преобразования — это мощная функция Scala, применяемая в двух распространенных вариантах:
- разрешить пользователям предоставлять аргумент одного типа так, как если бы это был другой тип, чтобы избежать шаблонного.
- в Scala 2 для предоставления дополнительных членов запечатанным классам (заменены методами расширения в Scala 3).
Детальный разбор
В Scala 2 неявное преобразование из типа S в тип T определяется либо неявным классом T
с одним параметром типа S, неявным значением, которое имеет тип функции S => T,
либо неявным методом, преобразуемым в значение этого типа.
В Scala 3 неявное преобразование из типа S в тип T определяется экземпляром given, который имеет тип scala.Conversion[S, T].
Для совместимости со Scala 2 их также можно определить неявным методом (подробнее читайте во вкладке Scala 2).
Неявные преобразования применяются в двух случаях:
- Если выражение
eимеет типSиSне соответствует ожидаемому типу выраженияT. - При выборе
e.m, гдеeтипаS, если селекторmне указывает на элементS.
В первом случае ищется конверсия c, применимая к e и тип результата которой соответствует T.
Примером является передача scala.Int, например x, методу, который ожидает scala.Long.
В этом случае вставляется неявное преобразование Int.int2long(x).
Во втором случае ищется преобразование c, применимое к e и результат которого содержит элемент с именем m.
Примером является сравнение двух строк "foo" < "bar".
В этом случае String не имеет члена <, поэтому вставляется неявное преобразование Predef.augmentString("foo") < "bar"
(scala.Predef автоматически импортируется во все программы Scala).
Дополнительная литература: Неявные преобразования (в книге Scala).
Contributors to this page:
Contents
- Введение
- Основы
- Единобразие типов
- Классы
- Значения Параметров По умолчанию
- Именованные Аргументы
- Трейты
- Кортежи
- Композиция классов с трейтами
- Функции Высшего Порядка
- Вложенные Методы
- Множественные списки параметров (Каррирование)
- Классы Образцы
- Сопоставление с примером
- Объекты Одиночки
- Регулярные Выражения
- Объект Экстрактор
- Сложные for-выражения
- Обобщенные Классы
- Вариантность
- Верхнее Ограничение Типа
- Нижнее Ограничение Типа
- Внутренние классы
- Члены Абстрактного Типа
- Составные Типы
- Самоописываемые типы
- Контекстные параметры, также известные, как неявные параметры
- Неявные Преобразования
- Полиморфные методы
- Выведение Типа
- Операторы
- Вызов по имени
- Аннотации
- Пакеты и Импорт
- Объекты Пакета