В соответствии со спецификацией языка 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
Надеюсь, это ответит на ваш вопрос.