當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。