gpt4 book ai didi

scala - 匹配宏中的子类

转载 作者:行者123 更新时间:2023-12-01 05:14:19 25 4
gpt4 key购买 nike

我需要将字符串值转换为实际类型,所以我决定尝试一种宏方式来做到这一点。我有一堆数据类型:

sealed abstract class Tag(val name: String)
case object Case1 extends Tag("case1")
case object Case2 extends Tag("case2")
case object Case3 extends Tag("case3")
etc...

我想写一个简单的解析器:
val tag: Tag = TagResolver.fromString("case2")

这一行应该返回 Case2分别。我经理要做到以下几点:
def typeFromString(c: Context)(name: c.Expr[String]): c.Expr[Tag] = {
import c.universe._
val tag = typeTag[Tag]
val accSymb = tag.tpe.typeSymbol.asClass
val subclasses = accSymb.knownDirectSubclasses // all my cases

subclasses.map { sub =>
val name = sub.typeSignature.member(newTermName("name")).asMethod // name field
???
}
}

但是我怎么匹配 name: c.Expr[String]name 的值字段,如果匹配返回适当的标签?

最佳答案

我认为没有可靠的方法可以做到这一点,因为 knownDirectSubclasses 可以引用尚未编译的类,因此我们无法评估它们。

如果您可以将这些值作为注释放在类上,那么即使在当前编译运行中编译类时(通过 Symbol.annotations API),也可以读取这些注释。但是请注意,knownDirectSubclasses 有已知问题:https://issues.scala-lang.org/browse/SI-7046 .

关于scala - 匹配宏中的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22170022/

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