2016-02-26 44 views
6

當我創建一個Option[Map[String,String]]這樣如何`獲得( 「鑰匙」)`上`選項[地圖[字符串,字符串]]`工作

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

爲什麼這個調用工作:

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

由於x是實例Option的,也沒有方法get接受的case class Some參數和類是final的,這不應該工作。 IDE沒有提供任何提示,爲什麼這是有效的。

+1

它調用映射上的apply方法 – hasumedic

回答

11

Option有一個沒有參數列表的get方法。您只要使用該名稱get不帶參數列表調用它:

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) 

你什麼時候回來就是,很明顯,Map

("foo")get應用於Map。請注意,這是在Map上調用apply方法的快捷方式語法。因此,x.get("foo")相當於x.get.apply("foo")

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

scala> x.get.apply("foo") // For this 
res3: String = bar 
相關問題