问题标签 [scala-quasiquotes]

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.

0 投票
1 回答
629 浏览

scala - 如何在准引号中拼接各种类型的符号?

我正在开发一个宏,在它的实现中我得到了 weakTypeOf T 其中 T 是宏函数的类型参数。我想拼接信息,从这个具体类型的方法定义到一个新的类声明树。我无法获得类型参数的 AST(为了对其进行模式匹配),所以我必须绝对使用基于符号的 API。我的问题是如何在比缩进和成员选择更多的位置拼接符号?

例如,要获取我所做的符号列表:

然后将信息拼接到 aq 插值器我想这样做:

根据符号如何拼接(描述here(PDF)),我不能直接进行这种拼接。实现这一目标的正确方法是什么?

0 投票
1 回答
337 浏览

scala - 如何在 Scala quasiquotes 中拼接类型和默认值?

我正在尝试制作一个提供更新案例类的类型提供程序。

我如何拼接类型和默认值(或省略默认值)?

我试过了:

我试过val valType = q"String"了,但是我得到一个错误,好像没有找到默认值:not enough arguments for method apply

我也尝试在定义为的 val 中进行拼接typeOf[String],并且我也尝试将ValDefs 的列表拼接到我的q"$mods class...(就像我q"def...在本网站上的一些类似问题中看到的那样),但在每种情况下都有一个打字机错误

有小费吗?非常感谢您的关注。

0 投票
1 回答
296 浏览

scala - How do I escape a newline in macro quasiquotes

For example:

This gives an error, because the newline characters is not resolved.

0 投票
1 回答
603 浏览

scala - 在 scala 宏中取消引用应用类型

在 scala 控制台中,我可以毫无问题地执行以下操作:

我可以得到我想要的:TheTypeThatIWant的内容

现在,如果我尝试在 quasiquote 中执行此操作,则会出现匹配异常,并且我没有找到获取应用类型的内部类型的方法。

我的代码:

但我得到的是:

我该如何解决?

谢谢

编辑 :

问题不仅在于准引号,甚至在我使用 Trees 时也会出现问题:

编辑2:

你必须这样做:

0 投票
1 回答
683 浏览

scala - 使用准引号从头生成同伴类的正确方法是什么?

我正在使用macroparadise 2.0.0-M3 在Scala 2.10.3 中试验宏注释。我试图了解如何使用 quasiquotes 为带注释的类生成伴随对象。到目前为止,我发现的是如何在已声明伴随对象时生成它。令人费解的是,即使代码总是发出相同的结构,情况也是如此。例如:

这是一个示例 REPL 会话,显示了预先声明伴随对象和不这样做之间的行为差​​异:

我是否错误地认为在这两种情况下都应该创建一个伴随对象?在http://docs.scala-lang.org/overviews/macros/annotations.html中声明宏注释旨在允许创建伴随对象。与此相关的是使用类上的宏注释创建或扩展伴随对象,它展示了在不使用准引号的情况下创建伴随对象。

0 投票
2 回答
511 浏览

scala - 在 Scala 宏中匹配 XML 文字

我想用宏转换 Scala XML 文字。(不是带有 XML 的字符串文字,而是实际的 XML 文字)。据我了解,XML 文字实际上并没有在 AST 级别上内置到语言中,而是在解析器中脱糖。有趣的是,这确实有效:

但很明显,这完全没用,因为不可能以这种方式匹配任意 xml。就像是

不能工作,因为我们必须在一个模式中绑定同一个变量两次。

打印出这种 xml 文字表达式的树实际上给出了脱糖版本。例如。

但试图匹配这个失败:

我很困惑!我的问题是:有没有办法可靠地匹配 scala 宏中的任意 xml litarals?另外:为什么它们在 quasiquotes 中支持常量 xml 而不是脱糖值?

0 投票
1 回答
2068 浏览

scala - 如何使用宏注释将无参数构造函数添加到 Scala 案例类?

我试图回答这个问题

而不是写:

我想我会使用宏注释来扩展它:

DefDef因此,我尝试在宏注释的 impl 中使用准引号将新构造函数添加为普通旧构造函数,例如:

但这会返回一个错误:called constructor's definition must precede calling constructor's definition

有没有办法解决这个问题?我错过了什么?

感谢您的观看,-朱利安

0 投票
3 回答
2265 浏览

scala - 冲突的跨版本后缀:org.scalamacros:quasiquotes

我正在尝试在我的一个项目中使用scala-pickling。我试图模仿似乎也使用酸洗的宏的构建文件,但我不断收到错误:sbt test

完整的构建日志在这里。我究竟做错了什么?我应该在build.sbt中更改什么来解决这个问题?我还应该能够针对 和 交叉编译和发布我的2.10.x2.11.x

0 投票
1 回答
661 浏览

scala-macros - 函数字面量可提升

有没有办法为功能文字(2.11)制作一个可升降的?如果我有

那么我也希望能够准引用predicate

我希望神奇地创建一个带有下划线的 Liftable。但这有点太乐观了:

通过查看StandardLiftables ,我无法弄清楚如何解决这个问题。

另一种看待它的方式:

假设我想在编译时使用宏从以下类创建实例:

我从其他地方检索一个函数文字作为变量值:

然后我想简单地将该变量准引用到构造中:

但它给了我这个错误:

通常我可以为自定义类型制作这样的隐式 Liftable 。但我还没有找到一种方法对函数文字做同样的事情。有没有办法做到这一点,还是我需要以另一种方式看待它?

0 投票
1 回答
279 浏览

scala - scala quasiquotes 将 Tree 转换为 AppliedType

我想推断 an 的隐含值AppliedType,这就是我所做的

但是tq返回一个Tree

如何将其转换为类型