【问题标题】:Scala: Compile time constantsScala:编译时间常数
【发布时间】:2012-06-25 18:32:23
【问题描述】:

如何在 Scala 中声明编译时常量?如果你在 C# 中声明

const int myConst = 5 * 5;

myConst 内联为文字 25。是:

final val myConst = 5 * 5

等效还是有其他一些机制/语法?

【问题讨论】:

    标签: scala constants compile-time-constant


    【解决方案1】:

    是的,final val 是正确的语法,Daniel's caveats。但是,在适当的 Scala 风格中,您的常量应该是驼峰式,首字母大写。

    如果您希望在模式匹配中使用常量,则以大写字母开头很重要。第一个字母是 Scala 编译器如何区分常量模式和变量模式。请参阅Programming in Scala 的第 15.2 节。

    如果val 或单例对象不以大写字母开头,要将其用作匹配模式,您必须将其括在反引号中(``)

    x match {
      case Something => // tries to match against a value named Something
      case `other` =>   // tries to match against a value named other
      case other =>     // binds match value to a variable named other
    }
    

    【讨论】:

      【解决方案2】:

      final val 是这样做的方法。如果可以的话,编译器会将其设为编译时常量。

      阅读下面丹尼尔的评论,详细了解“如果可以”是什么意思。

      【讨论】:

      • 你忘记了两个重要的点:它必须在编译时静态解析——我不确定 Scala 在编译时是否进行字面运算——而且,很容易出错,it不能有类型。如果声明为final val myConst: Int = 5,则不会被视为常量。
      • 你有关于它不能有类型的参考吗?
      • "final 修饰符必须存在,并且不能给出类型注释。" scala-lang.org/files/archive/spec/2.12/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 2013-11-25
      • 2012-03-21
      • 2023-03-04
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      相关资源
      最近更新 更多