2012-04-06 31 views
11

Cumplo algún código scala con "?" pero no sé lo que significa en scala, ¿alguien podría explicarme? Gracias.¿Qué significa un "?" significa símbolo (signo de interrogación) en Scala?

Y aquí es un ejemplo

def getJobId(conf: Configuration): String = 
    ?(conf.get("scoobi.jobid")).getOrElse(sys.error("Scoobi job id not set.")) 
+0

¿Puede dar un ejemplo? Los "?" podría ser parte de un nombre de método, nombre de clase u otra cosa. No es un operador estándar en Scala. – Jesper

+0

'val lovely_? = isItAGoodDay() '<- ¿así? –

+0

¿es solo yo o es el "?" método de ayuda en este caso completamente inútil? El mismo resultado, con menos caracteres y, en mi humilde opinión, más claridad, se obtiene con el estándar, conf.get ("foo") getOrElse sys.error ("bar") – virtualeyes

Respuesta

25

Para mí, parece que se aplica el método de Opción. ¿Hay algún lugar la siguiente declaración de importación en el código:

import Option.{apply => ?} 

Esto significa aplican se importa como ?. Del documento de Option.apply:

Una fábrica Opción que crea Algunos (x) si el argumento no es nulo,
y ninguno si es nulo.

Toda la declaración significa entonces:

si conf.get ("scoobi.jobid") no es igual nula, asignar esta cadena, de lo contrario asignar el sys.error cadena ("trabajo Scoobi id no establecido. ") devuelve

+1

Gracias, tienes razón. Hay una declaración de importación delante "opción de importación. {Apply =>?}" – zjffdu

7

Es sólo un carácter legal, al igual que "ABCD ..."

scala> def ?(i: Int) = i > 2 
$qmark: (i: Int)Boolean 

scala> val a_? = ?(3) 
a_?: Boolean = true 

UPD: Ver Valid identifier characters in Scala, Scala method and values names

UPD2 : En el ejemplo "?" podría ser la función, el método de this o simplemente algún objeto con el método apply. Probablemente devuelva Option[String].

Cuestiones relacionadas