Arbeiten mit Some () und Option () in Scala

8

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?

    
Jack 20.02.2012, 16:04
quelle

3 Antworten

34

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!

%Vor%

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!

Schieße deine Einwände ab

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"

    
oxbow_lakes 20.02.2012, 16:39
quelle
9

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

%Vor%

In den meisten Fällen sollten Sie Folgendes vermeiden:

%Vor%     
Dan Simon 20.02.2012 16:23
quelle
4

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:

%Vor%     
Daniel C. Sobral 20.02.2012 16:39
quelle

Tags und Links