Idiomatischer Art der Behandlung Option[Boolean]
In mein Scala-Programm, ich erhalte einige JSON.
Eines der Felder ist ein optionaler Boolean-Wert. Wenn das Feld fehlt, oder wenn der Wert false ist, würde ich gerne zurück None
. Wenn sein Wert true ist, würde ich gerne zurück Some(true)
.
Da dies ist äquivalent zu konvertieren Some(false)
in None
, ich habe die folgende Funktion:
def boolmap(ob: Option[Boolean]) = if(ob == Some(false)) None else ob
Es funktioniert, aber es scheint nicht sehr idiomatisch. Gibt es etwas eleganteres?
Seit Sie reduzieren eine dreifache Bedingung, um eine doppelte Bedingung, IMO idiomatischer wäre zu produzieren, die einen einfachen boolean (
Die Sache ist die mit die Option ist ganz praktisch für einige der Verarbeitung habe ich später machen.
Konnte Sie nicht verwenden
Aber zurück
Würde es, sehe ich Ihren Punkt.
getOrElse(false)
) und drop die Option
Die Sache ist die mit die Option ist ganz praktisch für einige der Verarbeitung habe ich später machen.
Konnte Sie nicht verwenden
ob.isDefined
um die zugrunde liegende Boolesche Wert?Aber zurück
None
für Some(false)
?Würde es, sehe ich Ihren Punkt.
InformationsquelleAutor Eduardo | 2013-06-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist
ob.filter(identity)
. Ich bin mir nicht sicher, ob das klarer, aber es ist kürzer.for(x <- ob if x) yield x
In der Tat. Es gibt auch
ob.filterNot(! _)
,ob.find(identity)
,ob.collect{ case true => true }
, und verschiedene andere. Sie können auch schreibenx=>x
im Ortidentity
.InformationsquelleAutor Rex Kerr
Ich Stimme mit anderen, dass Sie könnte genauso gut einfach zurück
true
oderfalse
da Sie nicht die Unterscheidung zwischen dem Attribut, das nicht da ist, an alle, dienull
oderfalse
.Wenn Sie gerade
Boolean
man könnte es so machen:Wenn Sie darauf bestehen, auf die Rückkehr
Option[Boolean]
ein pattern match mehr wäre idiomatischer:Könnten Sie auch
collect
aber in diesem Fall wäre es IMO komisch:exists { _ == true }
ist es sinnvoller zu schreibenexists(identity)
odercontains(true)
. Vergleichen boolescher Wert, der true ist verpönt, von vielen Programmierern Ist es schlimm, explizit den Vergleich mit der boolean-Konstanten, z.B. if (b == false) im Java.InformationsquelleAutor Marcel Molina