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)
这可能吗?
答案 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的案例类,请键入例如。