Reading the Programming in Scala 2nd Ed and I came across this:
literal identifier
“The idea is that you can put any string that’s accepted by the runtime as an identifier between backtick”
I’m not entirely sure why I would use this? The book gave a use case of accessing the static yield method in Java’s Thread class.
So since in Scala, yield is a reserve word, if I use yield with backticks,
Thread.`yield`()
it would ignore the Scala’s yield and let me access the Java’s Thread class’s method yield instead?
Thank you in advance.
Exactly. Using backticks, you can more or less give any name to a field identifier. In fact, you can even say
which defines a variable with name
(one character of whitespace).The literal definition of identifiers is useful in two cases. The first case is, when there is already a reserved word of the same name in Scala and you need to use a Java library which does not care about that (and of course, why should it).
The other use case comes with
casestatements. The convention is that lower case names refer to match variables, whereas upper case names refer to identifiers from the outer scope. So,prints
"b"(if the compiler were dumb enough not to fail with sayingcase Awere unreachable). If you want to refer to the originally definedval b, you need to use backticks as a marker.Which prints
"A".Add There is a more advanced use case in this recent question method with angle brackets (<>) where the backticks were needed to get the compiler to digesting the code for a setter method (which in itself uses some ‘magic’ syntax).