Описание тега implicit

Неявное в Scala - это применяемая функция или параметр, предоставляемый без явного появления в исходном коде.

В Scala есть два варианта имплицитов: неявные преобразования и неявные параметры.

Неявные преобразования применяются компилятором scala, когда он встречает выражение, которое он не может скомпилировать, но которое может быть скомпилировано, когда один из элементов передается в функцию, а возвращаемое значение используется вместо исходного элемента. Типичным вариантом использования является шаблон обогащения моей библиотеки.

Например, Scala допускает синтаксис "some.*regexp".r хотя литерал между кавычками - это String, а String не имеет метода r. Но в Predef есть метод:augmentString(x: String): StringOps а также StringOps имеет rметод. Итак, это неявное преобразование применяется.

Неявные параметры - это параметры, которые добавляются к вызову метода компилятором. Несколько известный вариант использования - библиотека коллекций. Многие методы принимаютCanBuildFromпараметр, который используется для определения типа коллекции, возвращаемой методом. В большинстве случаев этот параметр не указывается явно, но используется неявное значение по умолчанию, которое позволяет библиотеке коллекций возвращать "правильную" специализированную коллекцию.

Только поля, отмеченные как таковые, рассматриваются для использования в качестве неявных параметров или преобразований.

Хотя эта функция позволяет создавать мощные, краткие и безопасные по типу DSL и другие API, ее следует использовать с осторожностью, поскольку она также позволяет создавать код, который довольно сложно понять.