2016-06-17 12 views
-5

Ich versuche gerade, mich selbst in scala zu lesen. Aber habe ich am folgenden stecken:scala, Werte von Some (Wert)

val value: String = properties(j).attribute("value").toString 
print(value) 

Die XML-Eigenschaft gelesen wird und in einen String umgewandelt, sondern wird als „Some (Wert)“ betrachtet. Ich habe mehrere Dinge ausprobiert, aber keiner scheint zu funktionieren, wenn ich nicht selbst den Wert mit "Option: String" erstellt habe (was die übliche Lösung war). Hat jemand eine einfache Möglichkeit kennen, um loszuwerden, die „Some (“?

Grüße Ma

+0

Was sollte passieren, wenn das XML kein Wert-Attribut hat? – Kolmar

+7

Dies ist wahrscheinlich eine gute Lektüre für Sie, der Optionstyp ist wirklich üblich in Scala, lohnt sich, damit vertraut zu werden: http://danielwestheide.com/blog/2012/12/19/the-neophytes-guide-to- scala-part-5-the-option-type.html – alextsc

Antwort

4

Der Wert, den Sie die toString Methode sind die Aufforderung an eine Option[String] Art, im Gegensatz zu einem einfachen String. Wenn Es gibt einen Wert, Sie erhalten Some(value), und wenn es keinen Wert gibt, erhalten Sie None.

Aus diesem Grund müssen Sie die beiden möglichen Fälle behandeln, die Sie möglicherweise zurückbekommen Übereinstimmung:

val value: String = properties(j).attribute("value") match { 
    case None => ""//Or handle the lack of a value another way: throw an error, etc. 
    case Some(s: String) => s //return the string to set your value 
} 
0

Hallo und danke für die Eingabe. Ich nahm Ihren Code mit kleinen Änderungen, und es war ziemlich verwirrend mit den Variablen node.seq, String, Some(String), Some[A] am Anfang. Es funktioniert jetzt ziemlich gut mit dieser kurzen Version:

val value = properties(j).attribute("value") match { 
       case None => "" 
       case Some(s) => s //return the string to set your value 
      } 
Verwandte Themen