¿Por qué esta falla al compilar:método y Scala valora nombres
scala> val a? = true
<console>:1: error: illegal start of simple pattern
val a? = true
^
y esto funciona?
scala> val a_? = true
a_?: Boolean = true
¿Por qué esta falla al compilar:método y Scala valora nombres
scala> val a? = true
<console>:1: error: illegal start of simple pattern
val a? = true
^
y esto funciona?
scala> val a_? = true
a_?: Boolean = true
De acuerdo con la especificación del lenguaje Scala (mirando a 2,8, dudar de las cosas han cambiado mucho desde entonces):
idrest :: = {carta | digit} [`_ 'op]
Es decir, un identificador puede comenzar con una letra o un dígito seguido de un guion bajo y otros caracteres del operador. Eso hace identificadores como [email protected]!
identificadores válidos. Además, tenga en cuenta que los identificadores también pueden contener una cadena de caracteres de operador solos. Considere la siguiente sesión 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
Espero que responda a su pregunta.
La gramática de Scala para los identificadores se define de tal manera. ?
se define como un carácter de operador. Y un identificador debe obedecer las siguientes reglas: debe ser una letra minúscula que puede ser seguida por un elemento de una categoría sintáctica 'idrest', que se define como 'letras o dígitos, posiblemente seguido de _
y un opchar . ' Ver Scala Language Specification para más detalles.
Ver http://stackoverflow.com/a/7657692/257449 – huynhjl