考虑以下:

def f(implicit a: String, y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))

最后一个表达式导致以下错误:
not enough arguments for method f: (implicit a: String, implicit y:
Int)java.lang.String. Unspecified value parameter a.

但是,如果为隐式参数a提供默认值,则不会出现问题:
def f(implicit a: String = "haha!", y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))

但是最后一行打印
haha!: 2

虽然我本来期望
size: 2

因此,隐式值s不会被拾取。如果您不提供任何参数给f而只是调用
println(f)

然后隐式值被拾取,你得到
size: 0

有人可以阐明这里发生的事情吗?

最佳答案

尝试

println(f(y = 2, a = implicitly))

一旦开始指定参数,就无法返回。要么整个​​列表都是隐式的,要么全都不是。

10-08 05:16