Ich habe mich mit dem Konzept des funktionalen Parsens einer JSON-Zeichenfolge in Scala herumgeschlagen und bin flach in die Wand gerannt, wobei Option (etwas) zurückgegeben wurde. Ich habe die Frage gestellt und die hilfreichen Antworten kamen herein.
Das Problem ist, wie jemand ist ziemlich neu in Scala, was ist der richtige Weg?
Momentan mache ich das:
%Vor%Ich bleibe immer noch bei Some ()
Gibt es ein schönes Muster, um mein Problem zu lösen? Sicherlich muss dies ein gut erforschtes Gebiet sein. Wie kann ich meinen Code verbessern?
Sie sind nicht mit Some
"festgefahren" - Sie haben den Vorteil , dass Sie ein Some
haben! In Java würden Sie mit einem Wert festhalten, dessen Typ nicht die Tatsache ausdrückt, dass er möglicherweise nicht existiert!
Vergleichen Sie das mit diesem
%Vor% Der Datentyp Option
bedeutet, dass das Bit "might not exist" Ihrer Abfrage tatsächlich in den Rückgabetyp der Abfrage eingebettet ist. Bitte bleiben Sie bei Option
- in ein paar Wochen ziehen Sie Ihre Haare aus, wenn Sie Java-Code schreiben und es ist nicht da!
Sie könnten sagen :
Aw, aber ich muss den Wert nehmen, den ich habe, und 1 dazu hinzufügen
Ich sage:
%Vor%Sie könnten sagen
Aw, aber ich muss es an eine Methode übergeben, die auf die leere Zeichenfolge zurückgesetzt wird, wenn ich null habe
Ich sage:
%Vor%Sie könnten sagen
Aw, aber ich benutze diesen Wert, um eine andere API-Methode aufzurufen und etwas anderes zu bekommen
Ich sage:
%Vor%Sie werden definitiv sagen
Aw, aber das ist bei all diesen Objektkreationen schrecklich ineffizient
Ich sage: "Versuch es, es wird gut gehen"
Wenn Sie ein Ergebnis in eine Option einschließen möchten, verwenden Sie normalerweise match
oder eine der monadischen Methoden map
, flatMap
oder foreach
. Zum Beispiel könnten wir in Ihrem Fall eines von diesen tun
In den meisten Fällen sollten Sie Folgendes vermeiden:
%Vor% Hier ist die Sache: Sie haben vielleicht nicht die Daten bekommen, die Sie erwarten, in diesem Fall ist es nicht möglich, z
zu berechnen. Die Antwort auf Ihre Frage hängt also wirklich von Ihrer Antwort auf eine Frage ab: Was werden Sie tun, wenn Sie z
nicht berechnen können?
Angenommen, Sie möchten einfach nichts drucken, wenn z
nicht berechnet werden kann (dh None
). In diesem Fall tun Sie das:
Tags und Links scala