Dlaczego nie skompilować:metoda Scala i wartości nazwy
scala> val a? = true
<console>:1: error: illegal start of simple pattern
val a? = true
^
i to działa?
scala> val a_? = true
a_?: Boolean = true
Dlaczego nie skompilować:metoda Scala i wartości nazwy
scala> val a? = true
<console>:1: error: illegal start of simple pattern
val a? = true
^
i to działa?
scala> val a_? = true
a_?: Boolean = true
Według specyfikacji języka Scala (patrząc na 2,8, ponieważ wątpię rzeczy zmieniły się znacznie):
idrest :: = {list | cyfra} [`_ 'op]
Oznacza to, że identyfikator może rozpoczynać się od litery lub cyfry, po której następuje znak podkreślenia i dalsze znaki operatora. Czyni to identyfikatory, takie jak ważne identyfikatory [email protected]!
. Należy również pamiętać, że identyfikatory mogą również zawierać ciąg samych znaków operatora. Rozważmy następującą sesję 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 [email protected]! = true
[email protected]!: Boolean = true
scala> val %^@%@ = true
%^@%@: Boolean = true
scala> val ^&*!%@ = 42
^&*!%@: Int = 42
Mam nadzieję, że to odpowiada na twoje pytanie.
Gramatyka Scala dla identyfikatorów jest zdefiniowana w taki sposób. ?
jest zdefiniowany jako znak operatora. Identyfikator musi być zgodny z następującymi regułami: musi to być mała litera, po której może następować element kategorii składniowej "idrest", który jest zdefiniowany jako "litery lub cyfry, po których ewentualnie następuje _
i znak op . " Aby uzyskać więcej informacji, patrz Scala Language Specification.
Zobacz http://stackoverflow.com/a/7657692/257449 – huynhjl