当我创建像这样的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
上的参数且该类是最终的,因此这不起作用。 IDE没有提供任何提示,为什么这样做。
答案 0 :(得分: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
。请注意,这是在apply
上调用Map
方法的快捷语法。因此,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