Класс scala.annotation.implicitNotFound
Чтобы настроить сообщение об ошибке, которое выводится, когда не удается найти неявный параметр типа 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]
^
| Родительские типы |
|---|
© 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