2016-11-11 3 views
0

hatte ich einige Code:welchem ​​Fall impliziten Parameter und Multi-Parameter in Scala verwenden

def sum1(x: Int)(y: Int) = x + y 

und

def sum2(x: Int)(implicit y:Int) = x + y 

Könnten Sie mir bitte erklären, welcher Fall sum1 und sum2 verwenden?

Vielen Dank!

+0

Es wird 'sum1' verwenden, wenn Sie' sum1' aufrufen, und 'sum2', wenn Sie' sum2' aufrufen. – Falmarri

+0

Und Sie können nicht zwei Überladungen mit demselben Namen haben, die sich nur implizit von Argumenten unterscheiden. –

+0

Ich meine, wann wirst du Multiparameter aufrufen und wann wirst du den impliziten Parameter aufrufen :) –

Antwort

0

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.

Verwandte Themen