gpt4 book ai didi

scala 3宏如何实现通用特征

转载 作者:行者123 更新时间:2023-12-03 09:40:32 25 4
gpt4 key购买 nike

我想实现一个 proxy一些特征A (例如,将方法调用委托(delegate)给某些 rpc 调用),像这样

   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
}
}
}
但是编译器提示
A is not a class type

最佳答案

如果 A是你可以尝试替换的类(class)

'{
new A {
$exprs
}
}
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是一个特征,我想你应该定义一个实现这个特征的类并为这个类尝试类似的东西。

关于scala 3宏如何实现通用特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65561193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com