2012-04-06 28 views
11

Spotykam trochę kodu scala z "?" ale nie wiesz, co to znaczy w scala, czy ktoś może mi to wyjaśnić? Dzięki.Co oznacza znak "?" symbol (znak zapytania) oznacza w Scali?

A oto jeden z przykładów

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

Czy możesz podać przykład? "?" może być częścią nazwy metody, nazwy klasy lub czegoś innego. To nie jest standardowy operator w Scali. – Jesper

+0

'val lovely_? = isItAGoodDay() '<- w ten sposób? –

+0

czy to tylko ja, czy jest "?" metoda pomocnika w tym przypadku całkowicie bezsensowna? Ten sam wynik, z mniejszą liczbą znaków i, IMHO, większą przejrzystością, uzyskuje się za pomocą standardowego, conf.get ("foo") getOrElse sys.error ("bar") – virtualeyes

Odpowiedz

25

Dla mnie wygląda jak metoda zastosowania opcji. Czy istnieje gdzieś następujące oświadczenie import w kodzie:

import Option.{apply => ?} 

Oznacza to zastosować jest importowany jako ?. Z DOC Option.apply:

fabryce opcja, która tworzy niektóre z nich (x), jeśli argument nie jest null,
i None, jeśli jest zerowy.

Cała wypowiedź oznacza wówczas:

jeśli conf.get ("scoobi.jobid") nie jest równa null, przypisać ten ciąg, inaczej przypisać sys.error String ("SCOOBI praca id nie jest ustawione. ") zwraca

+1

Dzięki, masz rację. Jest jeszcze przedimek importowy "opcja importu. {Apply =>?}" – zjffdu

7

To tylko charakter prawny, podobnie jak "abcd ..."

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

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

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

UPD2 : W przykładzie "?" może być funkcja, metoda this lub tylko jakiś obiekt z metodą apply. Prawdopodobnie zwraca Option[String].