【发布时间】: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
如何在 Scala 中声明编译时常量?如果你在 C# 中声明
const int myConst = 5 * 5;
myConst 内联为文字 25。是:
final val myConst = 5 * 5
等效还是有其他一些机制/语法?
【问题讨论】:
标签: scala constants compile-time-constant
是的,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
}
【讨论】:
final val 是这样做的方法。如果可以的话,编译器会将其设为编译时常量。
阅读下面丹尼尔的评论,详细了解“如果可以”是什么意思。
【讨论】:
final val myConst: Int = 5,则不会被视为常量。
final 修饰符必须存在,并且不能给出类型注释。" scala-lang.org/files/archive/spec/2.12/…