Um eine Funktion mit einem impliziten Parameter aufzurufen, muss im impliziten Bereich genau ein Wert mit einem Typ vorhanden sein, der dem impliziten Parameter entspricht.
Hier sind einige sehr einfache Beispiele:
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
}
Wie Sie aus den Beispielen verstehen kann, wird bei der Kompilierung erfolgt implizit Auflösung.
Um mehr über das Thema zu erfahren (und um einige interessantere und aussagekräftigere Beispiele zu haben) empfehle ich, die Scala-Dokumentation this page zu lesen.
Es wird 'sum1' verwenden, wenn Sie' sum1' aufrufen, und 'sum2', wenn Sie' sum2' aufrufen. – Falmarri
Und Sie können nicht zwei Überladungen mit demselben Namen haben, die sich nur implizit von Argumenten unterscheiden. –
Ich meine, wann wirst du Multiparameter aufrufen und wann wirst du den impliziten Parameter aufrufen :) –