我正在尝试将自己读成scala。但是我被困在以下方面:
Statement
读取xml属性并将其转换为字符串,但将其视为" Some(value)"。我尝试了几件事,但似乎没有一件事能起作用,而不是我自己用" Option:String"(这是常见的解决方案)创造了价值。有人知道一个简单的方法来摆脱"一些("?
问候 马
答案 0 :(得分:10)
您调用toString方法的值是Option[String]
类型,而不是普通String
。当有值时,您将获得Some(value)
,而如果不是值,则您将获得None
。
因此,您需要处理可能会遇到的两种情况。通常用匹配完成:
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
}
答案 1 :(得分:2)
“ Some()。get”可以返回实际值。 例如:
val m = Map(("1", 2), (3, 4));
val a = m.get("1");
println(a.get + 1);
答案 2 :(得分:0)
您可以在Some(value)
上应用get方法object Example {
def main(args: Array[String]) = {
val vanillaDonut: Donut = Donut("Vanilla", 1.50)
val vanillaDonut1: Donut = Donut("ChocoBar", 1.50,Some(1238L))
println(vanillaDonut.name)
println(vanillaDonut.productCode)
println(vanillaDonut1.name)
println(vanillaDonut1.productCode.get)
}
}
case class Donut(name: String, price: Double, productCode: Option[Long] = None)
结果: - 香草
无
ChocoBar
1238
答案 3 :(得分:-1)
嗨,谢谢你的意见。
我对您的代码进行了微小的更改,并且在开头的变量node.seq, String, Some(String), Some[A]
中非常混乱。这个简短的版本现在很好用了:
val value = properties(j).attribute("value") match {
case None => ""
case Some(s) => s //return the string to set your value
}