问题标签 [scala-2.10]
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 - 名为 x 的 Scala 动态字段
只需实现一个动态对象(使用 2.10.0-M3):
以下工作正常且符合预期
打印'一个
但是,如果我尝试这个:
我得到令人讨厌的错误:
为什么 x 如此特别?我在做傻事吗?
macros - 可以避免这种自由项变量错误(在宏扩展时产生)吗?
我正在开发 DSL,但在扩展宏时遇到“免费期限”失败。我想知道是否可以避免。我已将问题简化为以下情况。
假设我们有这个表达式:
其中 join 是一个宏,其实现是:
宏的目的是连接参数块中的所有元素并将它们返回到一个列表中。由于块的内容可能是可变的,我不能使用带注释的 reify (效果很好)。未注释的 - 带有 for 理解,生成免费术语 - 抛出消息:
“宏扩展包含通过在 Macros.scala:48:18 中加入定义的自由术语变量列表。你在将这个变量拼接到一个 reifee 时忘记使用 eval 吗?如果你在跟踪自由术语变量时遇到问题,请考虑使用 -Xlog-free-条款”
有什么方法可以在不出现此错误的情况下引入 for-comprehension(或迭代器或其他)?顺便说一句,我使用的是2.10-M3。
scala - 在Scala中使用reify(获取AST)表达式的最简单方法是什么?
我正在寻找替代方案-print
或javap
作为弄清楚编译器在 Scala 中做什么的一种方式。使用新的反射/宏库,reify
似乎是一个很好的候选者,如retronym 的macrocosm所示desugar
。它甚至显示了一个人过去是如何做到这一点的,在 M4 之前。
所以问题是,我可以在 Scala 的 REPL 上键入最短/最简单的东西来获取表达式的 AST,后 Scala 2.10.0-M4?
scala - Scala反射错误:这是一个内部模块,在InstanceMirror上使用reflectModule来获取它的ModuleMirror
跟进这个问题,我试图弄清楚如何在对象上调用方法。相关定义如下:
我有一个这样Symbol
的:objA
这会返回一个Iterable
带有单个元素的 a,所以让我们说:
然后我尝试,基于this other question,这个:
这导致了该主题引用的错误消息:
问题是我无法弄清楚这条错误消息告诉我该怎么做!
scala - 为什么 Scala 2.10 在匹配单例类型时会给出“匹配可能并不详尽”的警告?
在 Scala 2.10.0-M4 中
给出:
这个对吗?当然,比赛实际上是详尽无遗的。
(同时,回到 Scala 2.9.X 我们得到
这大概是一个错误。)
scala - 如何在宏中重用定义 (AST) 子树?
我在 Scala 嵌入式 DSL 中工作,宏正在成为实现我的目的的主要工具。尝试将传入宏表达式中的子树重用到结果中时出现错误。情况相当复杂,但是(我希望)我已经简化了它以便理解。
假设我们有这样的代码:
其中 'transform' 是所涉及的宏。尽管它看起来似乎什么也没做,但它确实将显示的块转换为这个表达式:
这是通过这个宏实现完成的:
请注意,xNam对应于变量名称,xVal对应于其关联值,最后xExp对应于包含变量的表达式。好吧,如果我打印 xExp 原始树,我会得到Ident(newTermName("x")),这正是 RHS 案例中设置的内容。由于可以修改表达式(例如 x+2 而不是 x),因此这对我来说不是一个有效的解决方案。我想要做的是重用 xExp 树(参见 xExp 注释),同时改变 'x' 的含义(它是输入表达式中的定义,但将是输出表达式中的 case LHS 变量),但它会启动一个长错误总结在:
我当前的解决方案包括解析 xExp 以用新的标识替换所有标识,但它完全依赖于编译器内部,因此是一种临时解决方法。很明显,xExp 附带了 showRaw 提供的更多信息。如何清理该 xExp 以允许“x”扮演案例变量的角色?谁能解释这个错误的全貌?
PS:我一直在尝试使用TreeApi中的替代 * 方法系列,但没有成功,但我缺少了解其含义的基础知识。
scala - 是否可以集成蛋糕模式和宏?
我必须在使用蛋糕模式的项目中集成一些宏。这种模式使我们能够避免大量进口以及其他优势,因此我们希望保留它。现在,我们在主干外测试的一些实验性宏遇到了问题。首先,让我们展示一个名为 Cake 的虚拟系统:
APiece定义了一个类,BPiece应该是一个使用 APiece 定义的类的宏,最后,CPiece调用该宏。我说 BPiece 应该是一个宏,因为我无法为它编写实现代码。我尝试了几种方法,但总是因以下错误而崩溃:
阅读宏代码可以猜测将宏包含在静态模块中是必要的。有没有办法部署使用系统结构的宏?
scala - Scala 2.10 反射 API 中的类型相等
我在Scala 2.10.0 Milestone 4中遇到了一个奇怪的问题,我无法解决这个问题。首先是按我期望的方式工作的东西:
同样(在同一会话中):
这并不奇怪:我可以要求一个类型的父母并得到我所期望的。现在我基本上结合了上面的两个例子:
我不明白这怎么可能是假的。F
如果我有extend A[Seq[D]]
,等,也会发生同样的事情A[Int]
。我缺少什么可以使这种行为有意义的概括?
scala - Scala 2.10 和包反射
如何在 Scala 2.10 的反射中反映包层次结构?我可以找出存在哪些子包,或者父包是什么?
scala - Scala中反射的奇怪行为
我试图从另一个问题中举一个例子,但我遇到了一些我无法解释的事情:
怎么mkToolBox
不是m
import前的成员ToolBox
,而是之后的成员?