如何使用默认值处理选项

时间:2016-08-09 20:16:52

标签: scala

val a = user.type match {
  case Member => doSomething(if(user.location.isDefined) user.location.get.name else "")
}

我想安全地访问user.location,如果它存在,则为Option [Location],否则只使用空字符串。

case class Location(id: Int, name: String)

这可能吗?

3 个答案:

答案 0 :(得分:5)

简单地:

 doSomething(user.location.map(_.name).getOrElse(""))

答案 1 :(得分:3)

最佳方式"深度匹配"嵌入到其他对象内部的选项是通过结构模式匹配,最后给出所需值的变量名,并在=>右侧使用它。

我不知道你的会员"类看起来像,但假设它有两个参数,因为我们不关心第一个我们在那里放置下划线" _"然后直接引用第二个参数中的Location类,如下所示:

val a = user match {
  case Member(_, Location(_, Some(name))) => doSomething(name)
}

答案 2 :(得分:0)

这个怎么样?

val a = user.type match {
  case Member(id, type) if(user.location.isDefined) => doSomething(user.location.get.name)
}

如果您的成员是具有属性ID的案例类,请键入例如。