Scala-Syntax für den Zugriff auf die Eigenschaft einer Option inline und Kette "OrElse"?

8

Manchmal möchte ich den Wert zurückgeben, der eine Eigenschaft eines in Option eingeschlossenen Objekts ist, aber ich kann das nicht einfach mit getValue.orElse(otherValue) machen.

Zum Beispiel mappe ich Eigenschaften inline und ich möchte ein Muster wie object.get.property.orElse("") verwenden. Aber das vorhergehende kompiliert nicht. Wie kann ich auf diese Eigenschaft zugreifen und trotzdem eine optionale Syntax beibehalten?

    
crockpotveggies 26.06.2012, 17:06
quelle

2 Antworten

12

Sie können map() verwenden, um dies zu erreichen. Es wird offensichtlich, wenn Sie anfangen, über Option[T] wie einen Container vom Typ T zu denken, der 0 oder 1 Element enthalten kann:

%Vor%

Außerdem, wenn Sie eine verschachtelte Struktur von Option s:

haben %Vor%

Sie können verschachtelte Option mit flatMap :

extrahieren %Vor%

Oder Sie können filter() verwenden, um Some() in None umzuwandeln, wenn der in Some enthaltene Wert einige Kriterien nicht erfüllt:

%Vor%     
Tomasz Nurkiewicz 26.06.2012, 17:09
quelle
4

Verwenden Sie map() , um das option-ähnliche Muster beizubehalten.

Sie müssen zum Beispiel die Eigenschaft name eines field -Objekts erhalten. Wenn das Feld jedoch tatsächlich None ist, können Sie eine leere Zeichenfolge zurückgeben. So:

field.map(_.name).getOrElse("")

Und es im größeren Bild verwenden:

%Vor%     
crockpotveggies 26.06.2012 17:06
quelle

Tags und Links