2012-07-29 25 views
35

Wenn ich versuche, einen Wert vom Typ String in einem Feld vom Typ Option [Zeichenfolge] ich die folgende Fehlermeldung erhalten zu beeinflussen:Wie setze ich einen String in einer Option [String]?

type mismatch; found : String required: Option[String] 

Wie kann ich beeinflussen Wert myField:Option[String]myValue:String in dem Feld?

Antwort

52

Sie können auch einfach Option(myValue), die None und nicht-null zu null Some konvertieren.

+2

Sie müssen verstehen, wenn Sie Wert ist gleich "" (leere Zeichenfolge), Option in diesem Fall wird Some() – RomKazanova

+1

Korrekt, eine leere Zeichenfolge ist nicht das Gleiche wie null. –

12

Sie ein beliebiges Objekt in einem Option wie diese wickeln kann:

val opt = Some("foo") 
+7

Beachten Sie, dass Sie verwenden sollten 'Option (...)' im Allgemeinen zu vermeiden, immer ein 'Some (null)', wie man wird normalerweise eine Variable statt einer konstanten Zeichenfolge übergeben. – Frank

4

Sie können einfach Ihr Objekt in etwas Klasse wickeln

val myField = Some(myValue) 

Oder wenn Sie etwas nicht haben, passieren

None 

Es heißt Optionsmuster

http://www.codecommit.com/blog/scala/the-option-pattern

+3

'Option (...)' macht schon alles für dich. Es ersetzt 'null' Werte durch' None' und schließt die anderen in 'Some (...)' ein. Keine Notwendigkeit, in Ihrem Code dort zu unterscheiden. – Frank

+0

Mein Punkt war, das Optionsmuster zu erklären, wie wenn Sie eine benutzerdefinierte API verwenden und nichts weitergeben möchten, wenn der Wert leer ist. – FUD

0

Wenn Sie leere Zeichenfolge Keine universellere Lösung umwandeln wollen, ist: Option(str).filter(_.nonEmpty)

Verwandte Themen