Nehmen wir an, ich habe zwei optionale Ints (beide können Einige oder Keine sein):
%Vor% Meine Frage ist die folgende: Gibt es eine intelligente Methode, um sie mit Scolas brillanten Sammlungsmethoden zu summieren? Mir ist klar, dass ich sie in eine Sammlung zusammenfassen könnte, flatten
it und reduceLeftOption
wie folgt verwenden:
Aber die obige Lösung bedeutet, eine neue Sammlung zu schaffen und in einer reichen und entwickelten Welt zu leben, die Zeit braucht von all den anderen Aktivitäten der Ersten Welt, in die ich mich eintauchen könnte. Und in einer Welt, in der das Programmieren für Programmierer wie uns immer luxuriöser wird, muss es eine oder mehrere luxuriöse Antworten auf die erste Welt geben, oder?
Bearbeiten: Um das zu verdeutlichen, hier einige Beispiele:
Wenn one = Some(1)
und two = Some(2)
, sollten wir Some (3)
Wenn one = Some(1)
und two = None
, sollten wir Some (1)
Wenn one = None
und two = Some(2)
wir sollten Some (2)
Wenn sowohl one
als auch two
None
sind, sollten wir keine haben, da weder one
noch two
korrekt summiert werden können.
Ich hoffe, dass die Dinge geklärt: -)
obligatorische scalaz Antwort ist die Verwendung der Scalaz Option Monoid:
%Vor%Es wird tun, was Sie wollen in Bezug auf keine:
%Vor% Dass keine Methode eine Methode von scalaz ist, die bei der Typinferenz hilft, denn anstatt None <: Option[Nothing]
zurückzugeben, gibt es eine Option[Int]
, es gibt eine ähnliche Methode von Some, die eine Option [A] für ein beliebiges gegebenes A zurückgibt ein bisschen [A]:
Oder das weniger lesbare aber genau gleichwertig:
%Vor% AKTUALISIEREN : Wie Ihr letzter Bearbeitungsschritt klarstellte, wollen Sie nur ein None
als Ergebnis, wenn beide Eingabeoptionen None
sind. In diesem Fall glaube ich nicht, dass Sie in Sachen Einfachheit etwas Besseres bekommen als das, was Sie bereits verwenden. Ich könnte es ein bisschen kürzen, aber insgesamt ist das das gleiche:
Tags und Links scala option scala-collections