在 Scala 语言中,类的隐式作用域在运行时被删除,例如,如果定义:
case class A(i: Int)
object A {
implicit def toInt(a: A) = a.i
}
然后对于一个数组:
val arr = Array[Any](A(1), 2)
不可能写:
arr.map(_ + 3)
作为类型 A 并且其隐式范围在插入到 Array[Any] 后被删除。
这使得某些设计模式(例如类型类查找)无法在运行时应用(当类型信息仍然部分可用时)。就我而言,我想编写上面的程序而不在类型匹配中明确说明 A(因为在实际情况下,像 A 这样的类的数量可能是无数的)。是否有任何 scala 元编程包(首选 scalameta)能够在一个项目中执行此操作?我应该怎么做才能告诉 Java 运行时字节码“寻找运行时类的隐式,如果没有找到做其他事情”?