从Scala中隐式的函数返回的映射中获取值

时间:2016-06-16 12:40:56

标签: scala dictionary implicit

具有如下定义的隐含值和函数

implicit val v = 0

def function(implicit v: Int): Map[String, String] = Map("key" -> "value")

我能做到

function.get("key") // res0: Option[String] = Some(value)
function(v)("key") // res0: String = value

但以下内容无法编译

function("key")

那么我怎样才能一次使用括号访问地图并传递隐式参数?

1 个答案:

答案 0 :(得分:6)

以下是您的选择:

scala> function.apply("key")
res6: String = value

scala> function(implicitly)("key")
res7: String = value

由于编译器无法知道您是否要显式传递隐式参数或调用apply方法,因此设计人员认为这意味着传递隐式参数。

你可以放弃使用语法糖,只使用可以解决歧义的apply,或者你可以显式传递参数,但让编译器找到值。