Это не может быть сделано с компилятором Scala как есть, но возможно это было бы возможно с плагином компилятора, который изменил способ синтаксического анализа идентификаторов (возможно, если функция обратного тика была каким-то образом заменено каким-то неясным символом юникода).
В Scala SLS 1.1 существует лексический синтаксис для идентификаторов:
op ::= opchar {opchar}
varid ::= lower idrest
boundvarid ::= varid
| ‘`’ varid ‘`’
plainid ::= upper idrest
| varid
| op
id ::= plainid
| ‘`’ { charNoBackQuoteOrNewline | UnicodeEscape | charEscapeSeq } ‘`’
idrest ::= {letter | digit} [‘_’ op]
Проблема в том, что единственное правило, разрешающее использовать любой символ, кроме букв, цифр или _
, - это то, которое требует, чтобы идентификатор был заключен в кавычки:
‘`’ { charNoBackQuoteOrNewline | UnicodeEscape | charEscapeSeq } ‘`’
Однако, он явно не допускает обратных тиков с charNoBackQuoteOrNewline
, и, если вы думаете, что можете обойти это с UnicodeEscape
, это тоже не сработает:
scala> val `hello \u0060world` = "hello world"
<console>:1: error: unclosed quoted identifier
val `hello \u0060world` = "hello world"
^