scala-macros相关内容
我有一个ClassSymbol,我想生成一个抛出???的零参数方法。以下是我的尝试: 假定object Test是我们拥有的ClassSymbol类型。 I. val sym = //the ClassSymbol val tpe = tq"$sym.type" q"def foo(): $tpe = ???" 结果: [error] stable identifie
..
我有一个多项目包含一个私有宏子项目,其用途仅限于实现其他子项目的方法体.它也不应该在其他子项目的运行时类路径上,也不应该以任何形式在其他子项目的已发布 POM 中可见.这样其他 sbt 项目就可以在不知道宏子项目的情况下使用该项目中的库. 对于外部依赖,我发现了这个 SO Q&A 工作得很好,但是对于子项目,当我尝试对 dependsOn 做类似的事情时,sbt 抱怨找不到配置“compil
..
所以我在函数 (DefDef) 上有一个注释.这个注解有参数.但是,我对如何从构造函数获取参数感到困惑. 使用示例: 类 TestMacro {@Foo(真)def foo(): 字符串 = ""富} 注释代码如下: class Foo(b: Boolean) extends StaticAnnotation {def macroTransform(annottees: Any*) =
..
Context.eval 的输入似乎只能引用来自不同编译单元的值: //项目 1对象 Z {val foo = "WOOF"def impl(c: Context)(x: c.Expr[String]) = {val x1 = c.Expr[String](c.untypecheck(x.tree.duplicate))println(s"编译时值为:${c.eval(x1)}")X}def t
..
我想在 Scala 2.11+ 中使用注释宏生成方法的别名.我什至不确定这是否可能.如果是,怎么做? 示例 - 鉴于以下情况,我希望注释宏扩展为 类 Socket {@alias(aliases = Seq("!", "ask", "read"))def load(n: Int): Seq[Byte] = {/* impl */}} 我希望上面生成的同义词方法存根如下: 类 Socke
..
我将从一个例子开始.这是 Scala 2.10 中作为宏的元组的 List.fill 的等价物: 导入 scala.language.experimental.macros导入 scala.reflect.macros.Context对象元组示例 {def fill[A](arity: Int)(a: A): Product = macro fill_impl[A]def fill_impl[A
..
我正在尝试使用 Scala 宏来创建单参数 copy 方法的案例类映射,每个方法都接受一个 Play Json JsValue 和一个案例类实例,并返回实例的更新副本.但是,我遇到了返回函数对象的宏语法问题. 给定一个案例类 case class Clazz(id: Int, str: String, strOpt: Option[String]) 目的是创建类的复制方法的映射 隐式定
..
我正在制作一个通过反射字段值设置的 Scala 应用程序.这工作正常. 但是,为了设置字段值,我需要一个已创建的实例.如果我有一个带有空构造函数的类,我可以使用 classOf[Person].getConstructors.... 轻松做到这一点. 但是,当我尝试使用具有非空构造函数的 Case 类执行此操作时,它不起作用.我拥有所有字段名称及其值,以及我需要创建的 Object 类
..
假设我们要编写一个宏来定义一个带有一些类型成员或方法的匿名类,然后创建该类的一个实例,该类的静态类型为具有这些方法的结构类型等.这可以通过宏系统实现在 2.10.0 中,类型成员部分非常简单: object MacroExample 扩展 ReflectionUtils {导入 scala.language.experimental.macros导入 scala.reflect.macros.C
..
我在哪里可以学习如何构建 Scala 的宏生成的 AST? Scaladoc 没有我想的那么有用.例如: abstract def Apply(sym: Universe.Symbol, args: Universe.Tree*): Universe.TreeApply 节点的工厂方法. 但是我如何确定 Apply 节点是什么?我在哪里可以找到 AST 中的节点类型列表,以及它们如何组合
..
背景 我有一个 sbt 管理的 Scala 项目,它使用 通常的 sbt 项目布局 用于带有宏的 Scala 项目,即包含宏的子项目 主项目是实际应用程序并且依赖于宏子项目.宏是宏注释,本质上为定期上课.生成的伴随对象在其他成员中声明了应用/取消应用方法. 我使用 sbt-idea 插件生成了对应的 IntelliJ IDEA 项目,并使用 IDEA 的 sbt-plugin 中的 s
..
所以我有这个宏: import language.experimental.macros导入 scala.reflect.macros.ContextFoo类class Bar extends Foo { def launchMissiles = "launching" }对象 FooExample {def foo: Foo = 宏 foo_impldef foo_impl(c: Contex
..
我只是想知道是否可以在 Scala 中迭代密封特征?如果不能,为什么不能?既然性状是密封的,应该不是吧? 我想做的是这样的: 密封 trait ResizedImageKey {/*** 获取要在与此键关联的调整大小的图像上使用的尺寸*/def getDimension(originalDimension: Dimension): 维度}case class Dimension(widt
..
在 Scala 宏中,我想做这样的事情: 我有一棵Tree(可能很大).现在我想找到这棵树的具有某种具体形式的子树,例如应用(_, _).现在我想创建一个新树,它是原始树的副本,但是找到的子树被其他树替换了. 通过这样的事情,例如,我可以用调用其他方法来替换调用某个方法. 这样的事情有可能吗? 解决方案 我很想看到树转换的替代方法,但是,它们还没有出现(我们实际上正在朝这
..
我有一个函数,想获取它的参数类型和返回类型,以便在 Scala 宏中使用. scala>val fn = (a: String, b: Double) =>123fn: (String, Double) =>Int = 标度>fn.getClassres1: Class[_ Int] = 类 $anonfun$1 在上面的例子中
..
我想做一个类似于 Scala 宏:检查某个注释我的注释看起来像: class extract(val name: String) extends StaticAnnotation 我是这样使用它的: case class MainClass(@extract("strings") foo: String, bar: Int) 我正在尝试获取 foo 参数 Symbol 因为它有一个 @ex
..
感谢对我之前的问题的回答,我能够创建一个函数宏,使其返回一个 Map 将每个字段名称映射到它的类值,例如 ...特质模型case class User (name: String, age: Int, posts: List[String]) extends Model {val numPosts: Int = posts.length...def foo = "bar"...} 所以这个命令
..
是否可以在 Dotty、Scala 3 中使用宏生成新类? Zlaja 解决方案 目前在 Dotty 中只有(种类)def 宏.目前没有(某种)宏注释,它可以生成一个新成员,新班级等 对于新成员、新类等的生成,您可以使用 Scalameta(不带或带 SemanticDB, Scalafix [另见] 取决于此类生成是否为 只是句法或语义),它在编译时间(源代码生成)之前
..
如何编写宏注释,其用法类似于 @named("+2") _ + 2 并产生: new (Int => Int) {覆盖 def toString(): String = "+2"def apply(x: Int): Int = x + 2} 解决方案 正确的语法是 ((_: Int) + 2): @named("+2").不幸的是,注释表达式的宏注释不会扩展. 最简单的就是使用 对象
..
所以我有一个关于函数的注释(DefDef).这个注解有参数.但是,我对如何从构造函数获取参数感到困惑. 使用示例: class TestMacro {@Foo(真)def foo(): String = ""富} 这是注释的代码: class Foo(b: Boolean) extends StaticAnnotation {def macroTransform(annottees:
..