首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scala 3宏如何实现泛型特征

scala 3宏如何实现泛型特征
EN

Stack Overflow用户
提问于 2021-01-04 18:35:49
回答 1查看 214关注 0票数 9

我想实现某个特征Aproxy (例如,将方法调用委托给某个rpc调用),如下所示

代码语言:javascript
复制
   def clientProxy[A](using Type[A], Quotes): Expr[A] = {
    import quotes.reflect._
    val defTrees: List[Tree] = TypeRepr.of[A].typeSymbol.memberFields.collect {
      case mf if mf.isDefDef =>
        ???
    }

    val exprs = Expr.ofList(defTrees.map(_.asExpr))
    '{
      new A {
        $exprs
      }
    }
  }

但是编译器抱怨说

代码语言:javascript
复制
A is not a class type
EN

回答 1

Stack Overflow用户

发布于 2021-01-07 23:56:42

如果A是一个您可以尝试替换的类

代码语言:javascript
复制
'{
  new A {
    $exprs
  }
}

使用

代码语言:javascript
复制
Apply(
  Select.unique(New(TypeTree.of[A]), "<init>"),
  defTrees.map(_.asExpr.asTerm)
).asExprOf[A]

(Scala 3.0.0-RC1-bin-20210106-e39b79e-NIGHTLY)

How to access parameter list of case class in a dotty macro

既然A是一个特征,我想你应该定义一个实现这个特征的类,并尝试对这个类做类似的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65561193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档