Scala метод и значения значений - PullRequest
6 голосов
/ 25 декабря 2011

Почему это не скомпилируется:

scala> val a? = true
<console>:1: error: illegal start of simple pattern
   val a? = true
          ^

и это работает?

scala>  val a_? = true
a_?: Boolean = true

Ответы [ 2 ]

6 голосов
/ 25 декабря 2011

В соответствии со спецификацией языка Scala (с учетом 2.8, с тех пор многое изменилось):

idrest :: = {letter |цифра} [`_ 'op]

То есть идентификатор может начинаться с буквы или цифры, за которыми следует символ подчеркивания и дополнительные символы оператора.Это делает идентификаторы, такие как foo_!@! действительными идентификаторами.Также обратите внимание, что идентификаторы могут также содержать только строку символов оператора.Рассмотрим следующий сеанс REPL:

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) Client VM, Java 1.6.0_16).

scala> val +aff = true
<console>:1: error: illegal start of simple pattern
val +aff = true
^

scala> val ??? = true
???: Boolean = true

scala> val foo_!@! = true
foo_!@!: Boolean = true

scala> val %^@%@ = true
%^@%@: Boolean = true

scala> val ^&*!%@ = 42
^&*!%@: Int = 42

Надеюсь, это ответит на ваш вопрос.

2 голосов
/ 25 декабря 2011

Грамматика Scala для идентификаторов определяется таким образом. ? определяется как символ оператора. И идентификатор должен подчиняться следующим правилам: это должна быть строчная буква, за которой может следовать элемент синтаксической категории idrest, который определяется как «буквы или цифры, за которыми, возможно, следуют _ и символ операции». Подробнее см. Спецификация языка Scala .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...