Spec-Zone.ru › Scala 3.1

Класс scala.annotation.implicitNotFound

Исходный код

final class implicitNotFound(msg: String) extends ConstantAnnotation

Чтобы настроить сообщение об ошибке, которое выводится, когда не удается найти неявный параметр типа C[T1,..., TN], аннотируйте класс C с помощью @implicitNotFound. Предполагая, что C имеет параметры типа X1, ..., XN, сообщение об ошибке будет результатом замены всех вхождений ${Xi} в строке msg строковым представлением соответствующего аргумента типа Ti. Аннотация эффективно наследуется подтипами, если они не аннотированы.

Аннотация также может быть применена к неявным параметрам. В этом случае, ${Xi} может ссылаться на параметры типа в текущем объеме. Сообщение @implicitNotFound для параметра имеет приоритет над сообщением для типа параметра.

import scala.annotation.implicitNotFound

@implicitNotFound("Could not find an implicit C[${T}, ${U}]")
class C[T, U]

class K[A] {
  def m[B](implicit c: C[List[A], B]) = 0
  def n[B](implicit @implicitNotFound("Specific message for C of list of ${A} and ${B}") c: C[List[A], B]) = 1
}

object Test {
  val k = new K[Int]
  k.m[String]
  k.n[String]
}

Компилятор выводит следующие сообщения об ошибках:

Test.scala:13: error: Could not find an implicit C[List[Int], String]
 k.m[String]
    ^
Test.scala:14: error: Specific message for C of list of Int and String
 k.n[String]
    ^

Родительские типы
Трейт ConstantAnnotation
Трейт StaticAnnotation
Класс Annotation
Класс Object
Трейт Matchable
Класс Any

© 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://scala-lang.org/api/3.1.1/scala/annotation/implicitNotFound.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API