【发布时间】:2014-03-12 20:52:14
【问题描述】:
在注解宏中,我正在枚举一个类的成员,并且想要找到我找到的方法的类型。
所以我很高兴地遍历类的body,并收集所有DefDef 成员。
...我无法进行类型检查。
对于每个DefDef,我尝试将其包装在Expr 中并使用actualType。我试过复制这个东西并将它移植到一个临时类中(通过准引号)。我已经尝试了我能想到的所有其他方法:)
我能得到的最好的是NoType 或Any,这取决于所使用的技术。我得到的最糟糕的事情是向我抛出异常。
这些是def foo(i: String) = i 形式的简单方法,因此需要推断返回类型,但不需要外部信息。这里没有抽象类型、类型参数或类的其他成员。我想稍后处理更高级的案例,但希望先让这些琐碎的例子工作。
在插件中,这很简单。我只需对已抑制错误的整个单元进行类型检查,并通过符号获得我想要的内容,然后重置树属性以进行后续处理。作为一个宏......我很难过。
我错过了什么?
【问题讨论】:
标签: scala macros scala-macros scala-macro-paradise