问题标签 [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.
sbt - 在 sbt 项目中编译 Scala 2.10-RC3 宏
我在我的项目中使用 SBT,最近我决定向它添加宏。
所以我遵循了这个项目中的例子:
https://github.com/adamw/scala-macro-debug/tree/15fc8af48a6e7772c44b726513949a8ac9c9e3b7
在project/Build.scala
我有这个:
我的目录结构是:
所以 SBT 一直在 src 下编译所有东西,而且效果很好。
但是当我编译宏目录中的文件时,src 目录中的文件无法使用它,因此出现编译错误。
如何编译我的宏,然后让它们可用,以便使用它的项目可以找到它?
scala - 从方法符号和主体创建方法定义树
在 Scala 2.10 中是否有一种方便的方法可以将 aMethodSymbol
转换为方法定义树(即 a )的左侧?DefDef
例如,假设我想创建一个宏,该宏将采用一个 trait 的实例,并用一些调试功能包装该 trait 的所有方法。我可以写以下内容:
我已经省略了将这些方法粘贴到实现该特征的新匿名类中然后实例化该类的无聊业务——如果您有兴趣,可以在此处找到一个完整的工作示例。
现在我可以写这个,例如:
所以它有效,但仅在非常简单的情况下——如果 trait 具有带有参数列表、访问修饰符、注释等的方法,它就不会。
我真正想要的是一个函数,它将为新主体采用方法符号和树并返回一个DefDef
. 我已经开始手写一个,但它涉及到很多像这样的繁琐的东西:
这很烦人,冗长且容易出错。我是否错过了在新的反射 API 中执行此操作的更好方法?
scala - 如何在 reify 子句中使用 Scala 宏中计算的类型?
我一直在使用 Scala 宏,并在宏中有以下代码:
如您所见,我设法获得了一个c.universe.Type fieldMemberType
. 这表示对象中某个字段的类型。一旦我明白了,我想TypeBuilder
在 reify 中创建一个新对象。TypeBuilder
是一个带有抽象参数的抽象类。这个抽象参数是fieldType
。我希望这fieldType
是我以前发现的类型。
运行此处显示的代码会返回一个fieldMemberType not found
. 有什么方法可以让我fieldMemberType
在 reify 子句中工作?
scala - 替换 Scala 2.10 中已弃用的 <:< 清单类型见证
有人可以指出我应该在 scala 2.10 下做什么来代替 Manifest 上这个已弃用的类型见证吗?
老实说,我的目标只是用不会引起弃用警告的东西替换它。我很高兴使用新的反射 API。
如果这很重要,这是上下文中的相关代码:
java - Scala 2.10 宏与 Java 中可用的宏相比
我不太了解这个领域。
与使用编译预处理器的 Java 和 CGLIB、ASM、Byteman 等工具相比,有人可以解释 Scala 2.10 中使用宏的可能性吗?
scala - 记录 Scala 2.10 宏
我将从一个例子开始。List.fill
这是Scala 2.10 中的 for tuples 作为宏的等价物:
我们可以按如下方式使用此方法:
这家伙在几个方面是一只奇怪的鸟。首先,arity
参数必须是文字整数,因为我们需要在编译时使用它。在以前的 Scala 版本中,方法(据我所知)甚至无法判断其参数之一是否为编译时文字。
其次,Product
返回类型是一个谎言——静态返回类型将包括由参数确定的特定数量和元素类型,如上所示。
那么我将如何记录这件事呢?在这一点上,我并不期待 Scaladoc 支持,但我想了解一些约定或最佳实践(不仅仅是确保编译时错误消息清晰),这将使运行到宏方法中——使用它的潜在的奇怪需求——对于 Scala 2.10 库的用户来说并不奇怪。
新宏系统最成熟的演示(例如,ScalaMock、Slick以及此处列出的其他)在方法级别上仍然相对没有文档。任何示例或指针都将受到赞赏,包括来自具有类似宏系统的其他语言的示例或指针。
scala - `Deadline`结束时的scala 2.10回调
在 Scala 2.10 中,与新的Future
/ Promise
API 一起,他们引入了 aDuration
和Deadline
实用程序(如此处所述)。我环顾四周,但找不到 scala 标准库附带的任何东西,比如:
有没有类似的东西我错过了,还是我必须自己实施这种行为?
scala - 可以在变量名后插入带有字母数字的字符串吗?
假设我有一个变量 dec,是否存在一种方法可以在字符串 s"a $decimal" 中指定 $dec 是变量,其余的是文字?
scala - 我应该将我的库发布到哪个版本的 scala?
当我为 scala 发布时2.9.x
,我只是在 build.sbt 中有这一行:
但是现在,scala2.10
出来了,我很困惑。我的直觉是我应该有这样的东西:
但我注意到,当我将 scala 版本设置为 时2.10.0
,sbt 会搜索以2.10
, not结尾的工件2.10.0
。这里发生了什么?我应该使用什么版本?
编辑:另外,如果我这样做publish-local
,工件也会以“_2.10”而不是“_2.10.0”为后缀。
scala - 如何通过 Scala 反射访问默认参数值?
假设我有一堂课:
自动生成的伴生对象中的构造函数和应用方法都采用三个参数。当通过反射查看时,第三个参数(注)被标记:
此外,通过检查,我可以找到在伴随对象中产生值的方法:
和
两者都有:
但是,我在 TermSymbol 上找不到任何关于 notes 参数的东西,它实际上将我指向正确的方法来获取默认值,也找不到在上述 MethodSymbols 上指向参数的 TermSymbol 的任何东西。
是否有直接的方法将参数的 TermSymbol 与生成其默认值的方法联系起来?还是我需要做一些笨拙的事情,比如检查伴随对象上的方法名称?
我对这里的案例类构造函数示例和常规方法都感兴趣。