2010-10-20 8 views
7

Selbst mit der Vorherrschaft der Box- und Option-Monaden müssen wir hier und da noch nach Nullwerten suchen. Das Beste, was mir bisher eingefallen ist, ist die Verwendung der Box # !! Methode:Wie gehe ich idiomatisch mit Null-Checks innerhalb von Scala/Lift um?

(Box !! possiblyNull).map(_.toString).openOr("") 

Gibt es einen besseren Weg, dies zu tun? Ich habe versucht, Boxs anwenden Methode:

Box(possiblyNull).map(_.toString).openOr("") 

Aber der Compiler beschwerte sich einer mehrdeutigen Verweis auf eine überladene Definition, speziell:

[InType,OutType](value: InType) 
(pf: PartialFunction[InType,OutType])net.liftweb.common.Box[OutType] 

Ich bin nicht sicher, warum das passiert ist, aber ich hatte gehofft, es wäre eine kürzere, prägnantere Art zu sagen "Gib mir den Wert dieser Zeichenfolge, oder einfach" ". Ich dachte über die Verwendung von tryo, aber dachte es verschwenderisch, mit einer Ausnahme umzugehen, wenn es vermieden werden könnte.

Antwort

11

I Ich weiß nicht, um was es in Box geht, aber hier ein einfaches Beispiel unter Verwendung der Option:

scala> val str1:String="abc" 
str1: String = abc 

scala> val str2:String=null 
str2: String = null 

scala> Option(str1).getOrElse("XXX") 
res0: String = abc 

scala> Option(str2).getOrElse("XXX") 
res1: String = XXX 
+0

Wow, das ist viel einfacher .. danke. Box ist auch das Re-Vamping der Option von Lift. Anstelle der zwei Unterklassen von Option gibt es drei: Full, Empty und Failure. – Collin

+0

Das klingt wie http://www.scala-lang.org/archives/downloads/distrib/files/nightly/docs/library/scala/Either.html – pedrofurla