Rozważmy następujący:Scala nazwie i domyślne argumenty w połączeniu z parametrami ukrytych
def f(implicit a: String, y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))
ostatniego wyrażenia powoduje następujący błąd:
not enough arguments for method f: (implicit a: String, implicit y:
Int)java.lang.String. Unspecified value parameter a.
Jeśli jednak podać wartość domyślną niejawny parametr a, nie ma problemu:
def f(implicit a: String = "haha!", y: Int = 0) = a + ": " + y
implicit val s = "size"
println(f(y = 2))
Ale ostatnia linia wydruku s
haha!: 2
podczas Liczyłam
size: 2
Więc wartość niejawny 's' nie jest pobierany. Jeśli natomiast nie dostarczają żadnych parametrów do F i po prostu zadzwonić
println(f)
wówczas wartość niejawna jest zabierane i masz
size: 0
Czy ktoś może rzucić nieco światła na to, co się tu dzieje?
Należy sprawdzić, które implicite zakres które pośrednio korzysta. Nie sądzę, żeby to było to samo, co druga opcja. – jsuereth