Optionen in Scala und Java sind etwas, das ich kämpfe, um zu verstehen und zu arbeiten. Ich verstehe es dort, um die "Null" -Behandlung der Hölle zu beseitigen. Ehrlich gesagt denke ich, dass es eine andere Art von Hölle einführt!Scala und Java-Optionen tun wenn vorhanden, wenn nicht etwas anderes konstruieren
Die Art, wie ich mit NULL-Werten in Java behandeln ist wie etwas zu tun:
String test = null;
if(test==null) // do something
else // do something else
Diese Art der Entscheidung ist das, was ich suche zu tun, wenn ich auf Optionen wechseln.
Aber es gibt keine Methode in der Option-Klasse in beiden Scala und Java zu sagen, wenn null etwas tun, sonst etwas anderes tun.
Es gibt einen Weg, um den Wert im Falle unterliegen null, wie
//in scala
test.getOrElse("defaulted")
Ich frage mich, auf die Standard, warum es kippe Methoden sein wie die implizite Klasse ich geschrieben habe zu ‚pimpen‘ ein Scala Option
Bitte ignorieren Sie die schlecht benannte Methode. Aber mit diesem jetzt geschrieben, konnte ich angeblich eine Option wie folgt verwenden:
import Definitions._
val test : Option[String] = None
var builder =new StringBuilder
test.perform(builder ++= _,()=>addError("not found"))
//or
println(test.perform(_.reverse,()=>{"something else"}))
def addError(error:String)={
println(error)
}
Stattdessen bin ich gezwungen, Spiel und Fall zu schreiben alles für den Umgang mit Optionen zu tun. Ich muss etwas falsch machen. Höchstwahrscheinlich ist mein Verständnis der Verwendung von Optionen fehlerhaft. Die obige Art der Verarbeitung ist standardmäßig nicht in der Optionsklasse enthalten, und zwar aus einem Grund. Was könnte dieser Grund sein?
Die Verwendung von 'Any' als Typ für Ihre Methoden (oder Methodenparameter) bringt Sie in eine echte Hölle (Sie verlieren die ganze Macht, die Ihnen das Typsystem bietet). Das heißt, die idiomatischste Art, eine "Option" -Instanz zu verwenden, besteht darin, sie als eine Sammlung oder Monade zu behandeln und "map", "flatMap", "filter" oder "foreach" zu verwenden. – jarandaf
http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html Scrollen Sie nach unten zu "Tun Sie etwas, wenn Wert vorhanden ist" ... – Fildor
Scala hat bereits 'fold', um dies zu tun:' test.fold (addError ("nicht gefunden")) (builder ++ = _) ' – Kolmar