问题标签 [scala-macro-paradise]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - Scala 中的类型安全字符串插值
受此启发,我想知道我们是否可以在 Scala 中进行类型安全的字符串插值(可能使用宏)?
例如,我想要这样的东西
scala - 如何指定多个类的宏注解展开顺序?
假设我有两个宏注释类,并且在扩展期间定义了它们的字段之后,一个依赖于另一个:
@Annotation
case class A(i: Int)
@Annotation
case class B(a: A)
我需要A
先扩展B
,但它们的定义顺序并不能保证。
例如,B
在不相关的编译单元中将引用作为类型参数引用,例如:
class X{val b = B(A(1))}
在一个文件和class Y{Z[B]}
另一个文件中,
导致B
首先扩展,因此我的编译失败。
在这种情况下,是什么决定了宏展开的顺序?有没有办法强制执行所需的命令?
感谢您的输入,
朱利安
scala - 我可以使用 Java 反射来获取已添加 Scala 宏注释的成员的值吗?
MyRecord
我有一个 Scala 宏注释,它在编译时向一个类添加一个 val“x” 。
我还有一些 Java 代码用于MyRecord.class.getDeclaredField(x)
获取添加字段的值。
javap MyRecord.class
显示添加的字段确实是public
,但 Java 代码抛出错误,抱怨它是private final
.
这是一个显示 Java 反射返回private final
成员的简化项目。
由于我无法更改 Java 代码,如何让添加的字段public
被 Java 反射视为?
谢谢,
朱利安
scala - How to get range position from macro annotation?
I'm using macro annotation to instrument code. How can I get the range position of some expressions ?
The instrumenting macro:
I have range option enabled scalacOptions += "-Yrangepos"
I'm currently getting only the starting position: result: Map((75, 75) -> "foo", (80, 80) -> "bar")
scala - 为什么 sbt 对声明的依赖项使用不正确的版本号?
我有一个使用 1 个插件和 3 个依赖项的 sbt 构建文件:
但是编译器在编译 IScala-Macros 时给了我以下错误:
这似乎是一个错误,因为我不希望它们解析为 2.10.4-SNAPSHOT,但只有 2.10.4,它是 sbt 的错误吗?如果不是,这个 SNAPSHOT 是从哪里来的?
scala - 如何使用 quasiquote 提取主构造函数参数
我目前正在使用:
提取classDef
和paramss
。无论如何,这可能不那么冗长吗?paramss
也许从模式匹配中提取的东西a classDef: ClassDef
?
scala - 是否可以替换为 Scala 宏中的案例类生成的默认应用方法?
似乎这不起作用(使用 2.11.1 和宏天堂 2.0.1)。我希望案例类生成的方法要么被抑制,要么在树中,这样我就可以摆脱它。这是一个硬限制吗?
使用它:
结果是:
错误:(2, 2) 方法应用定义了两次冲突符号,都源自文件 'core/src/main/scala/Test.scala' @evis ^
scala - 是否可以有宏注释参数(以及如何获取它们)?
我有一些数据源需要在事务中包装操作,这有两种可能的结果:成功和失败。这种方法引入了相当多的样板代码。我想做的是这样的(失败也是如此(@txFailure
可能是这样)):
宏注释在哪里@txSuccess
,处理后将导致:
正如你所看到的,这种方法非常有用,因为在这个例子中,75% 的代码可以被删除,因为它是样板。
那可能吗?如果是的话,你能给我一个正确的方向吗?如果没有,您可以推荐什么来实现这样的目标?
scala - Scala 宏:使用选项类型创建新类
鉴于此,我想编写一个宏:
生成以下代码:
我在这里取得了不错的进展:https ://github.com/pathikrit/metarest
通过注释干净地对字段进行分组并生成Get/Post
类的最佳方法是什么?此外,对于Patch
班级 - 我如何将所有字段转换为Option[original.type]
?
scala - Scala递归宏?
我想知道 Scala 是否支持递归宏扩展,例如我正在尝试编写一个带有镜头宏的镜头库来执行此操作:
鉴于lens(a)(_.b.c.d)(f)
,我想将其转换为a.copy(b = lens(a.b)(_.c.d)(f))
编辑: 我在这里取得了一些不错的进展
List[TermName]
但是,对于上面的示例,我无法找出创建访问器的通用方法,因为我有List(TermName('b'), TermName('c'), TermName('d')))
,我想生成一个匿名函数,_.b.c.d
即(x: A) => x.b.c.d
。我怎么做?
基本上,我怎样才能以通用的方式编写这些行?