Ответ 1
Совершенно верно. Используя обратные выходы, вы можете более или менее дать какое-либо имя идентификатору поля. На самом деле вы даже можете сказать
val ` ` = 0
который определяет переменную с именем (один символ пробела).
Литеральное определение идентификаторов полезно в двух случаях. В первом случае, когда в Scala уже зарезервировано одно слово с именем Scala, и вам нужно использовать библиотеку Java, которая не заботится об этом (и, конечно же, почему она должна).
В другом случае используется оператор case
. Соглашение состоит в том, что имена нижних регистров относятся к переменным соответствия, тогда как имена верхнего регистра относятся к идентификаторам из внешней области. Таким образом,
val A = "a"
val b = "b"
"a" match {
case b => println("b")
case A => println("A")
}
prints "b"
(если компилятор был достаточно тупым, чтобы не терпеть неудачу, сказав, что case A
были недоступны). Если вы хотите обратиться к первоначально определенному val b
, вам нужно использовать обратные ссылки в качестве маркера.
"a" match {
case `b` => println("b")
case A => println("A")
}
Что печатает "A"
.
Добавить. В этом недавнем вопросе есть более продвинутый вариант использования с угловыми скобками (< gt;), где обратные ссылки были необходимо, чтобы компилятор переваривал код для метода setter (который сам по себе использует некоторый "магический синтаксис" ).