scala中数字文字中的下划线

Underscores in numeric literals in scala

显然 scala 不支持数字文字中的 jdk7 和更高版本的下划线?

我正在使用 jdk 8

scala> System.getProperty("java.version")
res0: String = 1.8.0_40

这里我们尝试使用 jdk7(及更高版本)数字文字:

scala> val x = 1_000_000
<console>:1: error: Invalid literal number
       val x = 1_000_000
               ^

有这个的 scala 语言选项吗?

在 Scala 领域,您可能见过以下内容:

s"My name is $firstName"

sql"select id, name from members where id = ${id}"

没有理由不拥有:

i"1 000 000"

甚至:

animal"Dog" // checks that Dog is on the list of animal words

Scala 库中没有内置 i 字符串插值,但是您可以使用:

implicit class IntContext(val sc: StringContext) {
  def i(args: Any*): Int = {
    val orig = sc.s(args: _*)
    orig.replace(" ", "").toInt
  }
}

i"1 000 000" // res0: Int = 1000000

请注意,从 Scala 2.13 开始,下划线被接受为数字文字分隔符:

val x = 1_000_000
// x: Int = 1000000
val pi = 3_14e-0_2
// pi: Double = 3.14

由于 Java 中的更新,您现在可以编写可读性得分很高的冗长数字文字 7. 在 Adeva 的博客上阅读更多内容 https://adevait.com/java/5-best-and-worst-practices-in-java-coding

在使用下划线之前:

int minUploadSize = 05437326;
long debitBalance = 5000000000000000L;
float pi = 3.141592653589F;

使用下划线后:

int minUploadSize = 05_437_326;
long debitBalance = 5_000_000_000_000_000L;
float pi = 3.141_592_653_589F;

上述Java中的声明说明了在数字文字中使用下划线以提高代码可读性的重要性。当您比较上面的两个声明时,您可以推断出包含下划线的声明比另一个声明更具可读性。