2015-07-07 2 views
8

Очевидно, что scala не поддерживает jdk7 и более поздние символы подчеркивания в числовых литералах?Подчеркивания в числовых литералах в scala

Я использую 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 для этого?

+2

Это 'javac' вещь. Нет причин думать, что 'scalac' будет поддерживать его. Scala очень мала синтаксис Java. –

+5

Об этом на прошлой неделе был [длинный \ [scala-debate \] поток] (https://groups.google.com/d/msg/scala-debate/4-CE9Lpf6CM/UJrhS9cyYcgJ). Короткий ответ: нет, нет, но это может быть доступно в Scala когда-нибудь, и тем временем существует множество способов получить что-то подобное без синтаксического шума. –

+6

@BoristheSpider Scala на самом деле довольно близка к Java в терминах синтаксиса для литералов, поэтому ожидание того, что поддержка опорных знаков здесь не является необоснованным. –

ответ

11

В Скале земли вы можете увидеть такие вещи, как:

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 

Там нет i строки интерполяции, встроенной в библиотеку Scala, однако вы можете использовать:

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 
+0

Спасибо, но мне было интересно узнать о встроенной поддержке компилятора - какой из комментариев к OP адресован достаточно хорошо. – javadba

+0

Нет встроенной поддержки. Необходимо выписать номер без пробелов или использовать подход, который я объяснил здесь, если производительность не вызывает беспокойства. – bjfletcher

+0

Я ценю ваш подход, но мне не нужны импликации: если бы не было языковой поддержки, пусть так и будет. Похоже, что он не определился для будущей поддержки или нет. – javadba