2015-04-15 4 views
0

Каковы правила для обозначения методов и переменных в Scala, особенно при смешивании символов и букв с использованием _? Например, почему _a_, a_+, __a, __a__a__a__+, ___ являются действительными именами, но _a_+_a или нет?Правила именования переменных Scala с подчеркиванием

+0

Обратите внимание, что '_a_' и все остальное, с возможным частичным исключением' a_ + ', обескуражены. '_' имеет много других значений в Scala; использование его внутри имен переменных также обычно визуально запутывает. Я использую его только в том случае, если переменная никогда не должна быть видна (например, во имя неявного определения, которое никто не должен вызывать напрямую); стилисты обычно говорят, что не используют его вообще, за исключением, возможно, для '_a', как имя частной переменной, соответствующей видимой переменной' a'. (Чтобы продолжить в сторону: я нахожу '_a' визуально запутанным, а затем тоже, поэтому я предпочитаю' myA' вместо.) –

ответ

4

Это в very first section of the Scala Language Specification:

Есть три способа, чтобы сформировать идентификатор. Во-первых, идентификатор может начинаться с буквы, за которой может следовать произвольная последовательность букв и цифр. За этим могут следовать символы подчеркивания '_' и другая строка, состоящая из букв и цифр или символов оператора.

Это не совсем понятно, но за персонажами оператора не может следовать ничего. Видели здесь (образец в конце идентификатора):

idrest ::= {letter | digit} [‘_’ op] 

_a_+_a и _a_+_ являются незаконными, поскольку они имеют другую букву или знак подчеркивания следующих символов оператора. Тем не менее, они являются законными, если вы окружаете их обратными кавычками.

scala> val `_a_+_` = 1 
_a_+_: Int = 1 

scala> val `_a_+_a` = 1 
_a_+_a: Int = 1 
+0

Регулярное выражение неверно: _ является законным как первый символ – Dici

+2

@ Dici - это синтаксис остальной части идентификатора , а не для всего. – ale64bit

+0

О, хорошо, мой плохой! – Dici

2

От here:

Есть три способа, чтобы сформировать идентификатор. Во-первых, идентификатор может начать с буквы, за которой может следовать произвольная последовательность из букв и цифр. За этим могут следовать символы подчеркивания '_' и другая строка, состоящая из букв и цифр или символов . Во-вторых, идентификатор может начинаться с символа оператора , за которым следует произвольная последовательность символов оператора. Предыдущие две формы называются равными идентификаторами. Наконец, идентификатор также может быть сформирован произвольной строкой между обратными кавычками (хост-системы могут налагать некоторые ограничения, для которых строки являются легальными для идентификаторов). Затем идентификатор состоит из всех символов, исключая сами обратные кавычки.

Вы также можете увидеть в ссылке грамматику языка.

Смежные вопросы