在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运行时字节码"为运行时类寻找隐式,如果找不到则执行其他操作"?