我在使用Java注释时遇到了一些棘手的问题,并且规定他们的参数必须是"常量".Scala 2.8语言规范的6.24规定"常量表达式"是以下任何一种(强调我的):
现在,"字符串文字"似乎是以这样的方式定义的,它实际上只是一个""或""""""分隔的字符块,这是非常明确的.那么,我的问题是给出的原因
object MyObject {
final val MY_CONSTANT1="foo"
final val MY_CONSTANT2="bar" + "baz"
final val MY_CONSTANT3="qux" + "quux" + "frobozz"
}
// ...
@MyAnnotation( ??? )
def Foo(): Unit {
...
Run Code Online (Sandbox Code Playgroud)
@MyAnnotation
用MY_CONSTANT1和MY_CONSTANT2编译和scaladocs,但不是MY_CONSTANT3(我得到"注释参数需要是常量").为什么MY_CONSTANT2可以工作?工作中是否有一些未指定的最多两个字符串 - 文字 - 可以组合成一个更大的规则,还是我疯了?
编辑我正在使用Scala 2.10,它似乎修复了早期Scala版本中一些与注释相关的编译器错误.
你说它"编译和scaladocs",所以我猜你的错误是当你运行scaladoc时,就像我一样.
使用scaladoc,您将获得仅运行到typer阶段的专用编译器.
其定制的东西之一是:
override def canAdaptConstantTypeToLiteral = false
Run Code Online (Sandbox Code Playgroud)
将其更改为true,您的简单示例将为scaladoc.
一开始的大评论adapt
说这是它做的第一件事,或者更确切地说,当scaladocking时它没有做的第0件事.
* (0) Convert expressions with constant types to literals (unless in interactive/scaladoc mode)
Run Code Online (Sandbox Code Playgroud)
只是为了好玩,我会试着翻看旗帜,看看有什么打破.(编辑:scala文档构建正常.标志源于演示编译器行为,但对我来说,它对scaladoc的适用程度并不明显.)
归档时间: |
|
查看次数: |
3536 次 |
最近记录: |