scala-macros

    0热度

    1回答

    在保持用Scala编写2.10.x老Scala代码重写后,意想不到的事情发生在我身上时,我试着输入macros检查TypeTree。看看下面的代码, annottees.map(_.tree).toList match { case q"$mods def $name[..$tpes](...$args) : $returnType = { ..$body }" :: Nil =>

    4热度

    1回答

    我想要捕获我的宏的输出分配给的变量的名称。与build.sbt中的project完全一样。如果有解决方案(库),我会更喜欢它,因为它看起来很普通的用例。 下面是小例子 val someValue = myMacro() ,并作为myMacro()输出我想获得字符串"someValue"。

    0热度

    1回答

    用于Scala的类的实现I型有一些问题阶宏和识别实现类型构造函数。 不知道,如果我在这里做得不对或有什么正确的调用会。 从文档,它看起来像typeSignatureIn应该返回正确的信息,例如ClassTag [INT],但是当我运行宏,我居然得到ClassTag [U]这无法编译为U是类型参数,而不是实现类型。 import scala.language.experimental.macros

    2热度

    1回答

    我正在写一个Scala宏(Scala 2.11),我想要使用inferImplicitValue来获得表示宏内隐式变量的树,评估该语法树并使用值。我实际上已经这样做了,但它似乎并不适用于所有情况[1]。我构建了一个失败的简化示例。 // a class for implicit evidence class DemoEvidence(val value: Int) // define 'fo

    3热度

    1回答

    我正在写一个Scala宏,并遍历树来寻找类中的非私有字段。 考虑以下代码,宏观着眼于: class Foo { val bar: String = "test" } 我穿越这个代码和获得bar的ValDef。它的修饰符中只有两个标志:Flag.PRIVATE和Flag.LOCAL。 在bar上使用private修饰符不会改变任何内容。使用protected修饰符仅将Flag.PRO

    0热度

    1回答

    我正在将Scala函数导出为外部格式。为此我使用scala.meta和StaticAnnotation。喜欢的东西: @ExportFunctions object MyFunctions { def max(x: Int, y: Int): Int = x max y } class ExportFunctions extends StaticAnnotation {

    1热度

    1回答

    我正在玩scala-meta的新款macro annotations。所以我延长了@Main注释的例子: SConsumer.scala: import scala.meta._ class SConsumer extends scala.annotation.StaticAnnotation { inline def apply(defn: Any): Any = meta {

    0热度

    1回答

    我试图创建一个斯卡拉宏象生成代码: val x = new com.foo.MyClass() 其中com.foo.MyClass肯定是在类路径在编译时和运行在项目中使用宏的时间。 我使用以下c.Tree生成代码: Apply(Select(New(Ident(TermName("com.foo.MyClass"))), termNames.CONSTRUCTOR), List()) 打印sh

    0热度

    1回答

    我正在创建一些从封装方法的注释中读取一些信息的宏库。 @info(foo(bar, baz)) def enclosing() = { myMacro() } 这些信息在StaticAnnotation@info被编码为foo(bar, baz)。 foo(bar, baz)包含的信息myMacro需要,然而,foo(bar, baz)不能在该位置@info型检查,并导致编译器错

    1热度

    1回答

    我需要真的 untypecheck我的宏发出的树。这意味着不仅要移除推断的类型和所有这些,还要移除由编译器推断的隐含参数。甚至没有resetAllAttrs似乎照顾这一点。 Symbol s似乎有一个方法isSynthetic,指示代码是否由编译器生成,但显然该标志仅针对自动生成的getter和setter等设置,而不针对编译器插入的隐式值。 我当然可以手动查找所有隐式参数列表并删除它们,但是我也