问题标签 [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.

0 投票
1 回答
4595 浏览

scala - 启用宏天堂扩展宏注释

我想检查一些带有注释的示例,macro paradise但我收到了错误,如下所示:this example

我已经关联了这些项目,其他 scala 宏(不带注释)运行良好。我已经包含了库paradise_2.11.6-2.1.0-M5(在这两个项目中也有:()。我想,我不明白这意味着什么*to enable*。!?顺便说一句,我在 Eclipse 中使用 Scala IDE。

0 投票
3 回答
1835 浏览

scala - 提取 Scala 项目的完整调用图(困难的一个)

我想从给定的 Scala 项目中提取所有方法的调用图,这些方法是项目自身源代码的一部分。

据我了解,演示编译器并没有启用它,它需要一直向下到实际的编译器(或编译器插件?)。

您能否建议完整的代码,它可以安全地适用于大多数 scala 项目,但那些使用最古怪的动态语言功能的项目?对于调用图,我的意思是一个有向(可能是循环的)图,包括class/trait + method顶点,其中边 A -> B 表示 A 可以调用 B。

应避免调用/从库调用或“标记”为项目自身源之外的调用。

编辑:

请参阅我的宏天堂衍生原型解决方案,基于@dk14 的领导,作为下面的答案。托管在https://github.com/matanster/sbt-example-paradise的 github 上。

0 投票
2 回答
1622 浏览

scala - 宏注释在 IntelliJ14 中不起作用

我在使用 Scala 宏时遇到问题。它一直在告诉我

启用宏天堂扩展宏注释

@compileTimeOnly我写的信息中。我遵循了宏注释文档SBT 示例中的所有说明。

IDE:IntelliJ 14.1

斯卡拉版本:2.11.7

项目文件夹下的 Build.scala:

代码:

我到底错过了什么?

0 投票
1 回答
1737 浏览

scala - What does it mean when macro annotation cannot be used in the same compilation that defines it?

I am curious about this statement:

Error:(3, 18) ...another possibility is that you try to use macro annotation in the same compilation run that defines it)

I tried googling and found this:

Finally, remember that using macros requires compilation to happen in two steps: first, compile the macros, then compile the code where the macros are used. This is necessary so that your macros can be run before the rest of your code is compiled. For example if you use SBT, you can configure Build.scala to use two modules, a “macros” module containing your macros, and a “root” module that depends on the “macros” module.

Does this mean that the macro definitions need to be in its own separate module to be used? And how do I define it in the build.scala so that the macro module compiles before the other?

0 投票
0 回答
292 浏览

scala - Scala 宏天堂使用 jar 代替 multiproject 构建游戏框架

我有以下问题:我有我的播放应用程序,我们称之为 PlayApp。在这个 Play 应用程序中,我创建了子项目(在 playApp 中的 dir /MyLib 中),我们称之为 MyLib。这个 MyLib 项目有一些带有类注释的宏。我想在 PlayApp 中使用该注释。所以我创建了这个 MyLib,我让 PlayApp 依赖于 MyLib。一切正常。这是我的 PlayApp/build.sbt

我知道 PlayApp 应该依赖于 MyLib,它应该在另一个编译运行中编译。但我想从这个 MyLib 项目中制作 jar。所以我做到了

在 /MyLib 中,然后我将 jar 放在项目的 /lib 中。一切看起来都很好,我可以看到从 MyLib.jar 编译的类,但出现编译错误:

编译错误

无法扩展宏注解(最常见的原因是您需要启用宏天堂插件;另一种可能是您尝试在定义它的同一编译运行中使用宏注解)

这是我熟悉的错误。这看起来像是 play 尝试在与 PlayApp 相同的编译运行中编译宏。有人知道解决方案吗?

编辑:

我找到了这个。我在我想使用它的项目类中双重导入了我的宏注释......你通常将你的库打包到 jar 中,将它放在 Play 应用程序的 /lib 中,然后在 build.sbt 中添加这个编译器插件。我的错误与该程序无关。仔细检查导入,这是查看此编译错误的另一种可能性。

0 投票
1 回答
276 浏览

scala - 使用来自 quasioquote 的隐式参数调用函数

出于某种原因,每次我尝试使用准引号中的隐式参数调用函数时,它都会失败 Can't unquote x.universe.Tree, consider providing an implicit instance of Liftable[x.universe.Tree]

那有什么问题?我不允许这样做吗?我找不到任何地方说我做不到

0 投票
1 回答
2113 浏览

scala - 使用 Scala 宏生成方法

我想在 Scala 2.11+ 中使用注释宏生成方法的别名。我什至不确定这是否可能。如果是,如何?

示例 - 鉴于以下情况,我希望注释宏扩展为

我希望上面生成同义词方法存根,如下所示:

上面当然是一个有趣的例子,但我可以看到这种技术对于自动生成 API 的同步/异步版本或在具有大量同义词的 DSL 中很有用。是否也可以在 Scaladoc 中公开这些生成的方法?使用 Scala 元这可能吗?

注意:我的要求与:https ://github.com/ktoso/scala-macro-method-alias 完全不同

另外请不要将此标记为重复,因为问题有点不同,并且在过去 3 年中,Scala 宏领域发生了很大变化。

0 投票
1 回答
351 浏览

scala - 如何使用宏扩展将参数传递给注释

我正在使用宏注释来生成代码。我想根据额外的字符串参数来改变它的行为。所以它会为相同的代码产生不同的结果。我密切关注仅涵盖最简单用法的宏注释指南。

这就是我现在使用宏的方式。以及我想要实现的目标:

0 投票
1 回答
158 浏览

scala - 在宏实现中使用静态 Java 声明

我正在尝试T在宏实现中对 Java 类使用静态方法:

这不起作用。当我打印出 的所有成员和声明时tpe,我想使用的静态方法不存在。如何访问这些静态方法并在准引用中使用它们?

我正在为 scala 2.10.6 使用 2.1.0 版的宏天堂编译器插件。

0 投票
1 回答
56 浏览

scala - 是否可以在 Scala 中创建没有宏注释的辅助构造函数?

我想创建一个宏来生成辅助构造函数{'s body)。是否可以在不使用宏注释的情况下做到这一点?(即宏天堂插件)

例如:

像这样的东西:

应该相当于这样的东西:

简单地使用“宏”关键字似乎没有帮助。这在普通的 Scala 中是完全不允许的吗?谢谢。