我有以下代码,其中 x 是自定义类型的实例。该代码是从一个更大的项目中提取的最小代码。
import scala.meta._
object Testing {
def main(args: Array[String]): Unit = {
x = CustomInt(6, "Some extra data")
if (q"$x > 5") {
println("hello")
}
}
在另一个文件中我有
import scala.reflect.runtime.universe._
case class CustomInt(val value: Int, val extra: String) {
... overloaded arithmetic operators
}
object CustomInt {
implicit def lift = Liftable[CustomInt] { i =>
q"_root_.customprimitives.CustomInt(${i.value}, ${i.extra})"
}
Scala 在 if 语句中给了我以下错误:
type mismatch when unquoting;
found : customprimitives.CustomInt
required: scala.meta.Term
我相信这个问题与使用 scala.meta.quasiquotes 而不是来自 scala.reflect 的问题有关。如果我尝试在 CustomInt 文件中使用 scala.meta,我会在提升函数上出现错误,因为 scala meta 没有它。
如何使我的 CustomInt 类在 scala.meta quasiquotes 中可提升?