当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Scala annotation.implicitNotFound用法及代码示例


用法:

final class implicitNotFound(msg: String) extends ConstantAnnotation

要自定义在找不到 C[T1,..., TN] 类型的隐式时发出的错误消息,请使用 @implicitNotFound 注释类 C.假设 C 具有类型参数 X1, ..., XN ,错误消息将是用相应类型参数 Ti 的字符串表示替换字符串 msg 中所有出现的 ${Xi} 的结果。如果子类型没有注解,注解就会被子类型有效地继承。

注释也可以附加到隐式参数。在这种情况下,${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]
    ^

源码:

implicitNotFound.scala

相关用法


注:本文由纯净天空筛选整理自scala-lang.org大神的英文原创作品 annotation.implicitNotFound。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。