有一些代码:
def sum1(x: Int)(y: Int) = x + y
和
def sum2(x: Int)(implicit y:Int) = x + y
你能给我解释一下哪种情况下会用到sum1和sum2吗?
谢谢!
要调用带有隐式形参的函数,必须在隐式作用域中恰好存在一个与隐式形参类型匹配的值。
下面是一些非常简单的例子:
def implicitSum(n: Int)(implicit m: Int): Int = n + m
val a = {
implicit val a = 2
implicitSum(1) // equals 3
}
val b = {
implicit val b = 3
implicitSum(1) // equals 4
}
val c = {
implicit val c = 4
implicitSum(1)(1) // equals 2: explicit parameter has higher priority
}
val d = {
implicitSum(1) // does not compile, no implicit (or explicit) parameter
}
您可以从示例中理解,隐式解析是在编译时完成的。
要了解更多关于这个主题(并有一些更有趣和有意义的例子),我建议阅读这页Scala文档