私は外部データストアから一連のXML応答を解析しています。その間、私は子ノードの存在をテストしなければならず、存在する場合はその値をテストしなければなりません。Scala XML:ノードの存在と値のテスト
...
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は、このような次のように定義されます:val name...
ライン上で「単純な式の違法開始」の不明なエラーで
private def checkDetectionNode(row: scala.xml.NodeSeq) : Option[scala.xml.NodeSeq] = {
if ((row \ "ResultDetectionConditionText") != null)
Some[scala.xml.NodeSeq]((row \ "ResultDetectionConditionText"))
else
None
}
上記のコードの結果、私は次のコードを持っていることを達成するために。正直言って私はScalaのプログラマではなく、機能的なプログラマでもありません(常にOO /必須の部分的でした)。私は数日間Scalaを使用してきただけで、私がJavaとラムダ演算子から知っているものの大半を基にしています。残念ながら、座って本当にスカラを学ぶ時間はありません。締め切りは、私たちすべての愚か者を作る。
私は間違っていることがあるかどうかを誰かが見て、私に知らせることを望んでいます(私はそこにいると確信しています)。私は、表示されたコードを、私が望むところで、その質問に関連するものに限定しようとしました。ただし、追加のコードが必要な場合はお知らせください。
おかげ
私は上記のことが声明の理解の一部であることを明確にすべきだと思います。 'if(cond)'は、yieldブロックの実行を決定するためのものです。私は、コードについて詳しく説明するために私の答えを編集しました。 – Cowan