Примите во внимание следующее:
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
Может кто-то пролить свет на то, что происходитздесь?