我正在写一个Scala宏(Scala 2.11),我想要使用inferImplicitValue来获得表示宏内隐式变量的树,评估该语法树并使用值。我实际上已经这样做了,但它似乎并不适用于所有情况[1]。我构建了一个失败的简化示例。 // a class for implicit evidence
class DemoEvidence(val value: Int)
// define 'fo
我正在写一个Scala宏,并遍历树来寻找类中的非私有字段。 考虑以下代码,宏观着眼于: class Foo {
val bar: String = "test"
}
我穿越这个代码和获得bar的ValDef。它的修饰符中只有两个标志:Flag.PRIVATE和Flag.LOCAL。 在bar上使用private修饰符不会改变任何内容。使用protected修饰符仅将Flag.PRO
我正在将Scala函数导出为外部格式。为此我使用scala.meta和StaticAnnotation。喜欢的东西: @ExportFunctions
object MyFunctions {
def max(x: Int, y: Int): Int = x max y
}
class ExportFunctions extends StaticAnnotation {
我试图创建一个斯卡拉宏象生成代码: val x = new com.foo.MyClass()
其中com.foo.MyClass肯定是在类路径在编译时和运行在项目中使用宏的时间。 我使用以下c.Tree生成代码: Apply(Select(New(Ident(TermName("com.foo.MyClass"))), termNames.CONSTRUCTOR), List()) 打印sh
我需要真的 untypecheck我的宏发出的树。这意味着不仅要移除推断的类型和所有这些,还要移除由编译器推断的隐含参数。甚至没有resetAllAttrs似乎照顾这一点。 Symbol s似乎有一个方法isSynthetic,指示代码是否由编译器生成,但显然该标志仅针对自动生成的getter和setter等设置,而不针对编译器插入的隐式值。 我当然可以手动查找所有隐式参数列表并删除它们,但是我也