问题标签 [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.
scala - 如何在准引号中拼接各种类型的符号?
我正在开发一个宏,在它的实现中我得到了 weakTypeOf T 其中 T 是宏函数的类型参数。我想拼接信息,从这个具体类型的方法定义到一个新的类声明树。我无法获得类型参数的 AST(为了对其进行模式匹配),所以我必须绝对使用基于符号的 API。我的问题是如何在比缩进和成员选择更多的位置拼接符号?
例如,要获取我所做的符号列表:
然后将信息拼接到 aq 插值器我想这样做:
根据符号如何拼接(描述here(PDF)),我不能直接进行这种拼接。实现这一目标的正确方法是什么?
scala - 如何在 Scala quasiquotes 中拼接类型和默认值?
我正在尝试制作一个提供更新案例类的类型提供程序。
我如何拼接类型和默认值(或省略默认值)?
我试过了:
我试过val valType = q"String"
了,但是我得到一个错误,好像没有找到默认值:not enough arguments for method apply
我也尝试在定义为的 val 中进行拼接typeOf[String]
,并且我也尝试将ValDef
s 的列表拼接到我的q"$mods class...
(就像我q"def...
在本网站上的一些类似问题中看到的那样),但在每种情况下都有一个打字机错误。
有小费吗?非常感谢您的关注。
scala - How do I escape a newline in macro quasiquotes
For example:
This gives an error, because the newline characters is not resolved.
scala - 在 scala 宏中取消引用应用类型
在 scala 控制台中,我可以毫无问题地执行以下操作:
我可以得到我想要的:TheTypeThatIWant的内容
现在,如果我尝试在 quasiquote 中执行此操作,则会出现匹配异常,并且我没有找到获取应用类型的内部类型的方法。
我的代码:
但我得到的是:
我该如何解决?
谢谢
编辑 :
问题不仅在于准引号,甚至在我使用 Trees 时也会出现问题:
编辑2:
你必须这样做:
scala - 使用准引号从头生成同伴类的正确方法是什么?
我正在使用macroparadise 2.0.0-M3 在Scala 2.10.3 中试验宏注释。我试图了解如何使用 quasiquotes 为带注释的类生成伴随对象。到目前为止,我发现的是如何在已声明伴随对象时生成它。令人费解的是,即使代码总是发出相同的结构,情况也是如此。例如:
这是一个示例 REPL 会话,显示了预先声明伴随对象和不这样做之间的行为差异:
我是否错误地认为在这两种情况下都应该创建一个伴随对象?在http://docs.scala-lang.org/overviews/macros/annotations.html中声明宏注释旨在允许创建伴随对象。与此相关的是使用类上的宏注释创建或扩展伴随对象,它展示了在不使用准引号的情况下创建伴随对象。
scala - 在 Scala 宏中匹配 XML 文字
我想用宏转换 Scala XML 文字。(不是带有 XML 的字符串文字,而是实际的 XML 文字)。据我了解,XML 文字实际上并没有在 AST 级别上内置到语言中,而是在解析器中脱糖。有趣的是,这确实有效:
但很明显,这完全没用,因为不可能以这种方式匹配任意 xml。就像是
不能工作,因为我们必须在一个模式中绑定同一个变量两次。
打印出这种 xml 文字表达式的树实际上给出了脱糖版本。例如。
但试图匹配这个失败:
我很困惑!我的问题是:有没有办法可靠地匹配 scala 宏中的任意 xml litarals?另外:为什么它们在 quasiquotes 中支持常量 xml 而不是脱糖值?
scala - 如何使用宏注释将无参数构造函数添加到 Scala 案例类?
我试图回答这个问题。
而不是写:
我想我会使用宏注释来扩展它:
DefDef
因此,我尝试在宏注释的 impl 中使用准引号将新构造函数添加为普通旧构造函数,例如:
但这会返回一个错误:called constructor's definition must precede calling constructor's definition
有没有办法解决这个问题?我错过了什么?
感谢您的观看,-朱利安
scala-macros - 函数字面量可提升
有没有办法为功能文字(2.11)制作一个可升降的?如果我有
那么我也希望能够准引用predicate
:
我希望神奇地创建一个带有下划线的 Liftable。但这有点太乐观了:
通过查看StandardLiftables ,我无法弄清楚如何解决这个问题。
另一种看待它的方式:
假设我想在编译时使用宏从以下类创建实例:
我从其他地方检索一个函数文字作为变量值:
然后我想简单地将该变量准引用到构造中:
但它给了我这个错误:
通常我可以为自定义类型制作这样的隐式 Liftable 。但我还没有找到一种方法对函数文字做同样的事情。有没有办法做到这一点,还是我需要以另一种方式看待它?
scala - scala quasiquotes 将 Tree 转换为 AppliedType
我想推断 an 的隐含值AppliedType
,这就是我所做的
但是tq
返回一个Tree
如何将其转换为类型