首页 > 解决方案 > 如何在 scala.meta quasiquotes 中使自定义类型可提升

问题描述

我有以下代码,其中 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 中可提升?

标签: scalascala-reflectscala-quasiquotesliftingscalameta

解决方案


推荐阅读