哪种情况将在Scala中使用隐式参数和多参数

时间:2016-11-11 08:02:33

标签: scala implicit multiparameter

我有一些代码:

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

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

请您解释一下哪个案例会使用sum1和sum2?

谢谢!

1 个答案:

答案 0 :(得分: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文档的this page