【问题标题】:Can i have a negative value as constant expression in Scala?我可以在 Scala 中将负值作为常量表达式吗?
【发布时间】:2010-06-02 15:49:32
【问题描述】:

我有一个返回双精度值的 Java 注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface DoubleValue {
  double value();
} 

当我尝试将注释附加到 scala 类中的字段并且值为负值时,如下所示:

class Test {
  @DoubleValue(-0.05)
  var a = _
}

我收到一条编译器错误消息:“注释参数需要是一个常量;找到:0.05.unary_-”。我知道我需要一个数字文字,并且我查看了 Scala 语言规范,似乎 - 符号仅用于指数而不用于尾数。有人知道如何使用注释将负值作为运行时信息吗?

谢谢, 克林克

【问题讨论】:

  • 看起来你可能已经发现了操作符作为方法的阴暗面。 :)
  • 您使用的是 Scala 2.7 吗? 2.8 中的注释处理有了很大改进。
  • 顺便说一下,这不是负浮点常量的一般问题,只是它们在注释参数中的使用。即使是现在,整数也可以。
  • 所以,您发现了一个错误。我已经在 Scala 错误数据库中输入了它:lampsvn.epfl.ch/trac/scala/ticket/3521 - 如果发现错误请报告,否则 Scala 开发人员不会知道,也不会修复错误。
  • @Jasper:Scala 错误数据库本身说,“您确定这是一个错误,而不仅仅是您对语言的不完全理解?如果您有任何疑问,请在开票前询问其他地方"。

标签: scala annotations constant-expression


【解决方案1】:

这似乎是一个错误。

在修复错误之前,您可以利用常量上的算术是一个常量这一事实并使用

@DoubleValue( 0-0.05 )

【讨论】:

  • 谢谢,这行得通,比我想到的“解决方案”要好得多。
猜你喜欢
  • 1970-01-01
  • 2021-12-14
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
相关资源
最近更新 更多