2016-04-27 6 views
2

ich Stücke mit verschiedenen Funktionen wie das folgende Beispiel ein XML baue:Wie wird ein leerer NodeSeq mit Scala XML zurückgegeben?

<xml> 
    { maybeXml(param) } 
</xml> 

Und versuchen, einen leeren oder nicht leeren NodeSeq Basis zurückzukehren auf den Wert des param wie:

def maybeXml(param: Boolean): NodeSeq = { 
    if(param) <someXml></someXml> 
    else ??? //Empty or None doesn't work 
} 

Die Lösung, die ich jetzt verwende, ist nur den Funktionstyp als Option [NodeSeq] zu definieren und dann als maybeXml.getOrElse ("") zu verwenden, aber das ergibt für mich nicht viel Sinn. Meine aktuelle Verwendung ist wie folgt:

<xml> 
    { maybeXml(param).getOrElse("") } 
</xml> 

def maybeXml(param: Boolean): NodeSeq = { 
    if(param) Some(<someXml></someXml>) 
    else None 
} 

Ist eine bessere Möglichkeit, dies mit einem leeren NodeSeq direkt auszudrücken?

Antwort

2

Für für leere NodeSeq Verwendung NodeSeq.Empty

def maybeXml(param: Boolean): NodeSeq = { 
    if(param) <someXml></someXml> 
    else NodeSeq.Empty 
} 
+0

Danke, funktioniert das für eine Funktion vom Typ NodeSeq. Aber ich habe auch den Fall einer Funktion, die nur einen einzigen Knoten zurückgibt. Irgendwelche Ideen, wie kann ich mit diesem Fall umgehen? – chaotive

+0

Nun, vielleicht gibt es eine bessere Lösung, aber 'Elem' ist' Node' und 'Node' ist' NodeSeq', so dass Sie eine Funktion erstellen können, die 'NodeSeq' zurückgibt wie' def get (p: Boolean): NodeSeq = if (p) else NodeSeq.Empty' –

+0

Nein, das Problem damit ist, dass es mich zwingt, den Typ von etwas zu ändern, das genau 0 oder 1 Knoten (Knotentyp) an eine mögliche Folge von 0 zu vielen Knoten zurückgibt (NodeSeq-Typ) Meine Funktionen müssen beschreiben, was das mögliche Ergebnis korrekt ist. Ich habe [eine andere Frage] (http://stackoverflow.com/questions/36896156/how-to-return-empty-node-using-scala-xml) für dieses Thema erstellt. – chaotive

Verwandte Themen