2016-02-26 5 views
6

Quando creo un Option[Map[String,String]] come questoCome fa `.get ("chiave")` su un `opzione [Mappa [String, String]]` lavoro

scala> val x = Some(Map("foo" -> "bar")) 
x: Some[scala.collection.immutable.Map[String,String]] = Some(Map(foo -> bar)) 

Perché fa questo lavoro chiamata:

scala> x.get("foo") 
res0: String = bar 

Da x è dell'istanza Option e non v'è alcun metodo get che accetta parametri sulla case class Some e che la classe è definitiva, questo non dovrebbe funzionare. L'IDE non fornisce alcun suggerimento, perché funziona.

+1

Si chiama il metodo apply su Mappa – hasumedic

risposta

11

Option ha un metodo get che non ha un elenco di parametri. Si chiama semplicemente utilizzando il nome get, senza una lista di argomenti:

scala> val x = Some(Map("foo" -> "bar")) 
x: Some[scala.collection.immutable.Map[String,String]] = Some(Map(foo -> bar)) 

scala> x.get // Note: no arguments 
res0: scala.collection.immutable.Map[String,String] = Map(foo -> bar) 

Quello che si ottiene indietro è, ovviamente, il Map.

Il ("foo") dopo get viene applicato a Map. Si noti che questa è la sintassi di scelta rapida per chiamare il metodo apply su Map. Quindi, x.get("foo") equivale a x.get.apply("foo").

scala> x.get("foo") // Shortcut syntax 
res2: String = bar 

scala> x.get.apply("foo") // For this 
res3: String = bar 
Problemi correlati