如何在`Option [Map [String,String]]`上运行`.get("key")`

man*_*ana 6 scala

当我创建Option[Map[String,String]]这样的

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

为什么这个电话有效:

scala> x.get("foo")
res0: String = bar
Run Code Online (Sandbox Code Playgroud)

因为x是实例,Option并且没有get接受参数的方法,case class Some并且该类是最终的,所以这不应该起作用.IDE没有提供任何提示,为什么这样做.

Jes*_*per 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)
Run Code Online (Sandbox Code Playgroud)

你得到的回答显然是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
Run Code Online (Sandbox Code Playgroud)