2014-06-13 7 views

Antwort

10

ich stark fördern würden Sie nicht formValues.get("whatever") zu verwenden, zum Teil, weil die Syntax sehr verwirrend-es sieht aus wie Sie anrufen get mit einem Schlüsselargument (wie zum Beispiel auf einer Karte), wenn Sie wirklich anrufen get auf der Option (das ist eine unsichere Operation-Sie sollten grundsätzlich von get auf Option grundsätzlich immer bleiben) und dann apply auf der resultierenden Karte (auch unsicher). Dieses Durcheinander ist Scalas Schuld, nicht deine, aber du willst immer noch vermeiden, hineinzugehen.

Stattdessen können Sie exists auf dem Option zusammen mit contains auf der Karte verwenden. Hier ist ein etwas vereinfachtes Beispiel:

val containsKey = formValues.exists(_.contains(key)) 

Dies wird true nur zurück, wenn die Option nicht leer und die Karte enthält den Schlüssel.

Ein noch besserer Ansatz ist es, die if -Anweisung wie diese zu vermeiden:

val os: Option[Seq[String]] = for { 
    m <- formValues 
    v <- m.get(key) 
} yield v 

os.foreach { v => \\ do something with the value } 

Hier haben wir mit einem Option am Ende, die den Wert enthält, auf den key, wenn die ursprüngliche Option nicht leer ist und die Karte enthält diesen Schlüssel.

Verwandte Themen