我有一些代码:
def sum1(x: Int)(y: Int) = x + y
和
def sum2(x: Int)(implicit y:Int) = x + y
您能否为我解释一下哪种情况将使用 sum1 和 sum2?
谢谢!
我有一些代码:
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 文档的这一页。