Ich bin sicher, dass es einen guten Grund dafür gibt, aber ich sehe es nicht.Option.fold - Warum ist das zweite Argument kein binärer Operator?
Fold
auf (sagen wir) List
kehrt
das Ergebnis der Anwendung fold Operator
op
zwischen allen Elementen undz
Es hat eine offensichtliche Beziehung zu foldLeft
und foldRight
, die das gleiche tun aber mit definierter Reihenfolge (und benötigen daher keine assoziativen Operatoren)
Fold
auf Option
kehrt
Gibt das Ergebnis
f
diesescala.Option
‚s Wert anzuwenden, wenn diescala.Option
nicht leer ist. Andernfalls wird der AusdruckifEmpty
ausgewertet.
ifEmpty
ist (in der Position der) z
für eine Liste. f
ist (in der Position) die op
Für None
(die mein mentales Modell von Option
als „Container“ verwenden, die keinen Wert enthalten können oder nicht, ein „leerer“ Container ist), sind die Dinge in Ordnung , Option.fold
gibt die Null zurück (Wert ifEmpty
).
Für Some(x)
allerdings sollte f
nicht zwei params nehmen, z
und x
so ist es mit dem fold
auf Sequenzen konsistent (einschließlich eine ähnliche Beziehung zu foldLeft
mit und foldRight
).
Es gibt definitiv ein Dienstprogramm Argument dagegen - mit f
nehmen Sie einfach x
als Parameter in der Praxis wahrscheinlich bequemer. In den meisten Fällen, wenn es auch z
brauchte, würde das ignoriert werden. Aber Konsistenz ist auch wichtig ...
Also kann mir jemand erklären warum fold
auf Option ist immer noch eine "richtige" fold
?
Aber 'Einige # falten' braucht 2 Argumente. https://github.com/scala/scala/blob/v2.11.3/src/library/scala/Option.scala#L1 Es tut mir leid, ich verstehe die Frage nicht – Jatin
Es braucht tatsächlich zwei Argumente; aber die Argumente sind nur in separaten Argumentlisten. – Jesper
Ich frage, warum das zweite Argument kein binärer Operator ist. Nicht warum fold selbst zwei Argumente braucht - wie Sie sagen, tut es! –