foldLeft
ist wie folgt definiert:
def foldLeft[B](z: B)(op: (B, A) ⇒ B): B
Das erste Argument die 'Null' ist, so dass das Element, das zuerst in die Falz Funktion übergeben wird (das zweite Argument). Im ersten Fall übergeben Sie also die Funktion union
als Null-Argument (und einziges Argument). Es wird deutlich, wenn Sie Typ Anmerkungen hinzufügen:
val sU1: (((Set, Set) => Set, Set) => (Set, Set) => Set) => (Set, Set) => Set = List(s1,s2,s3).foldLeft(union(_,_))
Wenn Sie nur die Null-Argument zu foldLeft
(Stichwort currying) geben Sie eine Funktion erhalten, eine Funktion als Parameter genommen wird. Die Parameterfunktion nimmt Elemente der Typen Ihrer Elemente in die Liste und das Nullargument (also eine Set
und die Art der Vereinigung ->(Set, Set) => Set
) und gibt etwas vom Typ Ihres Nullarguments zurück (also in Ihrem ersten Fall wieder eine Funktion von Typ (Set, Set) => Set
).
Was möchten Sie wahrscheinlich ist:
val sU2: Set = List(s1,s2,s3).foldLeft(singletonSet(0))(union)
Sie benötigen einen gültigen Null Argument übergeben und dann können Sie die Vereinigung Funktion verwenden, wie Sie wollen.
Eine weitere Option, wenn Sie einen Anfangswert liefern nicht wollen, ist reduceLeft
, die in der Liste als Anfangswert das erste Element nimmt:
val sU3: Set = List(s1,s2,s3).reduceLeft(union)
Ich denke, dass mehr Sinn in Ihrem Fall macht .
Welche Dummy-Argumente meinst du? wen meinst du mit "ihr"? –
@katie versuchen, ein wenig Formalität in Ihren Fragen zu halten. Keine Notwendigkeit für Emoticons etc. macht nur die Frage schwieriger zu lesen. Versuchen Sie auch zu vermeiden, Themen zu vergessen (es ist nicht immer klar, was Sie mit ihm meinen). – thwiegan