Scala 选项[Map[String,String]`上的“.get”(“key”)是如何工作的

Scala 选项[Map[String,String]`上的“.get”(“key”)是如何工作的,scala,Scala,当我像这样创建一个选项[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是实例选项,并且没有方法get接受case类Some上的参数

当我像这样创建一个
选项[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
是实例
选项
,并且没有方法
get
接受
case类Some
上的参数,并且该类是最终类,因此这不应该起作用。IDE没有给出任何提示,这是为什么

选项
有一个没有参数列表的
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)
很明显,你得到的是
地图

get
之后的
(“foo”)
应用于
映射。请注意,这是调用
映射
上的
apply
方法的快捷语法。因此,
x.get(“foo”)
相当于
x.get.apply(“foo”)


它正在调用Map上的apply方法
scala> x.get("foo")  // Shortcut syntax
res2: String = bar

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