jil*_*len 8 scala dotty scala-3
我想实现proxy
一些特征A
(例如委托方法调用到一些 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
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是编译器抱怨
A is not a class type
Run Code Online (Sandbox Code Playgroud)
如果A
是一个类你可以尝试替换
'{
new A {
$exprs
}
}
Run Code Online (Sandbox Code Playgroud)
和
Apply(
Select.unique(New(TypeTree.of[A]), "<init>"),
defTrees.map(_.asExpr.asTerm)
).asExprOf[A]
Run Code Online (Sandbox Code Playgroud)
(Scala 3.0.0-RC1-bin-20210106-e39b79e-NIGHTLY)
现在既然A
是一个特征,我想你应该定义一个实现这个特征的类,并为这个类尝试类似的事情
使用 Scala 3 宏覆盖方法(自 Scala 3.1.3 起)
归档时间: |
|
查看次数: |
165 次 |
最近记录: |