Основными инструментами для достижения статически проверяемого полиморфизма в Scala являются
- Подтип (болотный OO-полиморфизм)
- Параметризация типа (допускает полиморфную дисперсию и ограничения)
- Самотипирование (допускает ограничение и специализацию ОО-полиморфизма)
- Неявное преобразование (допускает полиморфное построение постфактум)
- Структурная типизация (допускает полиморфизм на основе признаков, а не типа)
- Границы общего типа (допускающие чрезвычайно точные ограничения на разрешенный полиморфизм)
- Сопоставление с образцом (допускает полиморфизм на основе структуры данных, аналогично абстрактным типам данных)
- Высший родтипы (допускающие полиморфизм по полиморфным конструкциям)
Вызывать все эти «альтернативы», вероятно, неверное слово, поскольку они так хорошо интегрированы.Нередко некоторые полиморфные алгоритмы могут быть выражены с использованием нескольких из этих инструментов в сочетании.
Также стоит отметить место для понимания в полиморфизме Scala.Для понимания не кажутся особенно полиморфными.Ниже поверхности для-понимания просто синтаксический сахар для вызовов filter / map / flatMap, и реализации этих методов имеют тенденцию быть очень полиморфными.Таким образом, то, что выглядит как сравнительно простые циклы for, может привести к некоторым действительно впечатляющим полиморфным эффектам.