scala-macros相关内容

在 sbt 中添加仅编译时的子项目依赖项

我有一个多项目包含一个私有宏子项目,其用途仅限于实现其他子项目的方法体.它也不应该在其他子项目的运行时类路径上,也不应该以任何形式在其他子项目的已发布 POM 中可见.这样其他 sbt 项目就可以在不知道宏子项目的情况下使用该项目中的库. 对于外部依赖,我发现了这个 SO Q&A 工作得很好,但是对于子项目,当我尝试对 dependsOn 做类似的事情时,sbt 抱怨找不到配置“compil ..
发布时间:2022-01-24 22:35:42 其他开发

从 Scala 宏注解中获取参数

所以我在函数 (DefDef) 上有一个注释.这个注解有参数.但是,我对如何从构造函数获取参数感到困惑. 使用示例: 类 TestMacro {@Foo(真)def foo(): 字符串 = ""富} 注释代码如下: class Foo(b: Boolean) extends StaticAnnotation {def macroTransform(annottees: Any*) = ..
发布时间:2022-01-13 10:04:08 其他开发

使用 Scala 宏生成方法

我想在 Scala 2.11+ 中使用注释宏生成方法的别名.我什至不确定这是否可能.如果是,怎么做? 示例 - 鉴于以下情况,我希望注释宏扩展为 类 Socket {@alias(aliases = Seq("!", "ask", "read"))def load(n: Int): Seq[Byte] = {/* impl */}} 我希望上面生成的同义词方法存根如下: 类 Socke ..

如何使用 scala 宏创建函数对象(创建 Map[String, (T) => T])

我正在尝试使用 Scala 宏来创建单参数 copy 方法的案例类映射,每个方法都接受一个 Play Json JsValue 和一个案例类实例,并返回实例的更新副本.但是,我遇到了返回函数对象的宏语法问题. 给定一个案例类 case class Clazz(id: Int, str: String, strOpt: Option[String]) 目的是创建类的复制方法的映射 隐式定 ..
发布时间:2022-01-11 19:55:28 其他开发

如何在 Scala 中使用没有参数的构造函数参数创建案例类的实例?

我正在制作一个通过反射字段值设置的 Scala 应用程序.这工作正常. 但是,为了设置字段值,我需要一个已创建的实例.如果我有一个带有空构造函数的类,我可以使用 classOf[Person].getConstructors.... 轻松做到这一点. 但是,当我尝试使用具有非空构造函数的 Case 类执行此操作时,它不起作用.我拥有所有字段名称及其值,以及我需要创建的 Object 类 ..
发布时间:2022-01-11 19:40:34 其他开发

从宏中获取具有匿名类方法的结构类型

假设我们要编写一个宏来定义一个带有一些类型成员或方法的匿名类,然后创建该类的一个实例,该类的静态类型为具有这些方法的结构类型等.这可以通过宏系统实现在 2.10.0 中,类型成员部分非常简单: object MacroExample 扩展 ReflectionUtils {导入 scala.language.experimental.macros导入 scala.reflect.macros.C ..
发布时间:2022-01-11 19:36:51 其他开发

我在哪里可以了解如何为 Scala 宏构建 AST?

我在哪里可以学习如何构建 Scala 的宏生成的 AST? Scaladoc 没有我想的那么有用.例如: abstract def Apply(sym: Universe.Symbol, args: Universe.Tree*): Universe.TreeApply 节点的工厂方法. 但是我如何确定 Apply 节点是什么?我在哪里可以找到 AST 中的节点类型列表,以及它们如何组合 ..
发布时间:2022-01-11 19:36:34 其他开发

如何让 IntelliJ IDEA 识别由宏创建的代码?

背景 我有一个 sbt 管理的 Scala 项目,它使用 通常的 sbt 项目布局 用于带有宏的 Scala 项目,即包含宏的子项目 主项目是实际应用程序并且依赖于宏子项目.宏是宏注释,本质上为定期上课.生成的伴随对象在其他成员中声明了应用/取消应用方法. 我使用 sbt-idea 插件生成了对应的 IntelliJ IDEA 项目,并使用 IDEA 的 sbt-plugin 中的 s ..

迭代 Scala 中的密封特征?

我只是想知道是否可以在 Scala 中迭代密封特征?如果不能,为什么不能?既然性状是密封的,应该不是吧? 我想做的是这样的: 密封 trait ResizedImageKey {/*** 获取要在与此键关联的调整大小的图像上使用的尺寸*/def getDimension(originalDimension: Dimension): 维度}case class Dimension(widt ..
发布时间:2021-12-07 12:41:31 其他开发

如何用其他树替换子树?

在 Scala 宏中,我想做这样的事情: 我有一棵Tree(可能很大).现在我想找到这棵树的具有某种具体形式的子树,例如应用(_, _).现在我想创建一个新树,它是原始树的副本,但是找到的子树被其他树替换了. 通过这样的事情,例如,我可以用调用其他方法来替换调用某个方法. 这样的事情有可能吗? 解决方案 我很想看到树转换的替代方法,但是,它们还没有出现(我们实际上正在朝这 ..
发布时间:2021-11-26 18:02:25 其他开发

scala 宏:如何读取注释对象

我想做一个类似于 Scala 宏:检查某个注释我的注释看起来像: class extract(val name: String) extends StaticAnnotation 我是这样使用它的: case class MainClass(@extract("strings") foo: String, bar: Int) 我正在尝试获取 foo 参数 Symbol 因为它有一个 @ex ..
发布时间:2021-11-10 23:05:52 其他开发

Scala 宏:检查某个注释

感谢对我之前的问题的回答,我能够创建一个函数宏,使其返回一个 Map 将每个字段名称映射到它的类值,例如 ...特质模型case class User (name: String, age: Int, posts: List[String]) extends Model {val numPosts: Int = posts.length...def foo = "bar"...} 所以这个命令 ..
发布时间:2021-11-10 22:45:22 其他开发

如何使用宏在 Dotty 中生成一个类?

是否可以在 Dotty、Scala 3 中使用宏生成新类? Zlaja 解决方案 目前在 Dotty 中只有(种类)def 宏.目前没有(某种)宏注释,它可以生成一个新成员,新班级等 对于新成员、新类等的生成,您可以使用 Scalameta(不带或带 SemanticDB, Scalafix [另见] 取决于此类生成是否为 只是句法或语义),它在编译时间(源代码生成)之前 ..
发布时间:2021-11-10 22:25:32 其他开发

从 Scala 宏注释中获取参数

所以我有一个关于函数的注释(DefDef).这个注解有参数.但是,我对如何从构造函数获取参数感到困惑. 使用示例: class TestMacro {@Foo(真)def foo(): String = ""富} 这是注释的代码: class Foo(b: Boolean) extends StaticAnnotation {def macroTransform(annottees: ..
发布时间:2021-11-10 22:06:27 其他开发