scala,从Some获取值(值)

时间:2016-06-17 14:46:12

标签: scala

我正在尝试将自己读成scala。但是我被困在以下方面:

Statement

读取xml属性并将其转换为字符串,但将其视为" Some(value)"。我尝试了几件事,但似乎没有一件事能起作用,而不是我自己用" Option:String"(这是常见的解决方案)创造了价值。有人知道一个简单的方法来摆脱"一些("?

问候 马

4 个答案:

答案 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
            }