Scala 如何自定义隐式未找到消息

Scala 如何自定义隐式未找到消息,scala,Scala,在以下示例中使用=:=运算符时,我希望替换标准隐式未找到消息: TBoolean 密封式特效特效延长剂 密封特性TFalse扩展TBoolean 类生成器[X根据implicitNotFoundannotation Scaladoc(): …找不到,请用@implicitNotFound注释类C 因此,在使用具有此选项的=:=类的情况下,您不能覆盖它,除非您将实现自己的类型平等证明类型类,并显示自己的错误消息: @implicitNotFound(msg = "Custom type equal

在以下示例中使用
=:=
运算符时,我希望替换标准隐式未找到消息:

TBoolean
密封式特效特效延长剂
密封特性TFalse扩展TBoolean

类生成器[X根据
implicitNotFound
annotation Scaladoc():

…找不到,请用@implicitNotFound注释类C

因此,在使用具有此选项的
=:=
类的情况下,您不能覆盖它,除非您将实现自己的类型平等证明类型类,并显示自己的错误消息:

@implicitNotFound(msg = "Custom type equals prove message ${From} =::= ${To}.")
    sealed abstract class =::=[From, To]
    private final val singleton_=::= = new =::=[Any,Any] {}
    object =::= {
      implicit def tpEquals[A]: A =::= A = singleton_=::=.asInstanceOf[A =::= A]
    }
并使用它:

def withZ(zz: List[List[Int]])(implicit ev: Z =::= TFalse)
因此,结果错误消息将是:

Custom type equals prove message TTrue =::= TFalse.

希望这能有所帮助!

您可以通过像这样内联注释来为特定方法更改它

def g[A](i: A)(implicit @implicitNotFound("You should not be a ${A}") ev: A =:= Int) = ???

g("") // Error: You should not be a String

但是当然,这只适用于该方法。

您将注释放在哪里?我尝试使用..
方法和
构建方法将其放在
上,但没有效果,因为这是失败的代码,所以最好将其放在问题中。它适用于您吗?我尝试过这种方法,但仍然得到
无法证明字符串=:=Int
错误消息。我正在使用Scala 2.12和
-Xlint:implicit not found
Scalac选项。请共享您的环境设置好吗?Thanks@IvanKurchenko似乎在我的机器Scala 2.13.1上工作。我没有设置任何特殊标志。谢谢你的回答,我认为值得一提这将只适用于Scala2.13,因为我已经检查了2.12和2.13这两种方法。再次感谢您的分享!