scalabook

Форк
0
/
ca-by-name-parameters.md 
35 строк · 1.2 Кб

Контекстные параметры по имени

Контекстные параметры также могут быть объявлены по имени, чтобы избежать использования предполагаемого расширения. Пример:

trait Codec[T]:
def write(x: T): Unit
given intCodec: Codec[Int] =
(x: Int) => println(s"$x has been written")
given optionCodec[T](using ev: => Codec[T]): Codec[Option[T]] with
def write(xo: Option[T]) = xo match
case Some(x) => ev.write(x)
case None =>
val s = summon[Codec[Option[Int]]]
s.write(Some(33))
// 33 has been written
s.write(None)

Как и в случае обычного параметра по имени, аргумент контекстного параметра ev

оценивается по требованию. В приведенном выше примере, если значение параметра xo
равно None
, оно вообще не вычисляется.


Ссылки:

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.