Именованные аргументы Scala и аргументы по умолчанию в сочетании с неявными параметрами

Учтите следующее:

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

Может ли кто-нибудь пролить свет на то, что здесь происходит?

11
задан j0k 2 July 2013 в 07:40
поделиться