0

我有一些代码:

def sum1(x: Int)(y: Int) = x + y

def sum2(x: Int)(implicit y:Int) = x + y

您能否为我解释一下哪种情况将使用 sum1 和 sum2?

谢谢!

4

1 回答 1

0

为了调用带有隐式参数的函数,在隐式作用域中必须存在一个类型与隐式参数匹配的值。

这里有一些非常简单的例子:

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 文档的这一页

于 2016-11-11T10:16:44.460 回答