Sto analizzando una serie di risposte XML da un archivio dati esterno. Durante il quale devo testare l'esistenza di un nodo figlio e - se esiste - testarne il valore. Per conseguire aver il codice seguente:Scala XML: test per esistenza nodo e valore
...
val properties = for {
val row <- root \\ "ResultDescription"
val cond:Boolean = checkDetectionNode(row) match {
case Some(nodeseq) => {
val txt = nodeseq.text.toLowerCase
if (txt contains "non-detect")
false
else
true
}
case None => true
}
if (cond)
val name = (row \ "CharacteristicName").text
if (charNameList.exists(s => s == name) == false)
} yield {
getObservedProperty(name) match {
case Some(property) => {
charNameList = name :: charNameList
property
}
}
}
...
checkDetectionNode è definito come tale:
private def checkDetectionNode(row: scala.xml.NodeSeq) : Option[scala.xml.NodeSeq] = {
if ((row \ "ResultDetectionConditionText") != null)
Some[scala.xml.NodeSeq]((row \ "ResultDetectionConditionText"))
else
None
}
I risultati di codice di cui sopra in un errore non specificato di "inizio illegale di semplice espressione" sulla linea val name...
. Ad essere onesti, non sono un programmatore di Scala o anche un programmatore funzionale (era sempre più parziale a OO/imperativo). Ho usato Scala solo da pochi giorni e ho basato la maggior parte di ciò che conosco dagli operatori Java e lambda. Sfortunatamente, non ho il tempo di sedermi e imparare davvero Scala come vorrei. Scadenze, prendi in giro tutti noi.
Spero che qualcuno possa dare un'occhiata e farmi sapere se c'è qualcosa che sto sbagliando (come sono sicuro che ci sia). Ho provato a limitare il codice mostrato a, quello che spero, è pertinente alla domanda. Tuttavia, mi faccia sapere se è necessario un codice aggiuntivo.
Grazie
Immagino che dovrei chiarire che quanto sopra è parte di una comprensione per affermazione. Il 'if (cond)' è supposto essere per determinare l'esecuzione del blocco di rendimento. Ho modificato la mia risposta per approfondire il codice. – Cowan