Scala 如何使用默认值处理选项

Scala 如何使用默认值处理选项,scala,Scala,我想安全地访问user.location,如果它存在,这是一个选项[location],否则只需使用空字符串即可 val a = user.type match { case Member => doSomething(if(user.location.isDefined) user.location.get.name else "") } 这可能吗?简单地说: case class Location(id: Int, name: String) 这个怎么样 doSomethin

我想安全地访问user.location,如果它存在,这是一个选项[location],否则只需使用空字符串即可

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

简单地说:

case class Location(id: Int, name: String)
这个怎么样

 doSomething(user.location.map(_.name).getOrElse(""))
如果您的成员是具有属性id的case类,请键入例如。

将“深度匹配”嵌入嵌套在其他对象中的选项的最佳方法是通过结构模式匹配,最后为所需的值指定一个变量名,并在=>的右侧使用它

我不知道您的“Member”类是什么样子,但假设它有两个参数,因为我们不关心第一个参数,我们在那里放了一个下划线“389;”,然后在第二个参数中直接引用Location类,如下所示:

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

很抱歉,我将问题更新为location而不是middleName,location是一个case类/模型。@Coolbree这仍然是正确的答案,实际上
getOrElse
因为location是一个选项,所以这样做是行不通的:``user.getOrElse(“”)``因为属性是一个位置而不是字符串。@Coolbree
doSomething(user.location.map(u.name.getOrElse(“”))这不是编译。你需要使用提取。为了完整起见,我将添加它。有一个松散的
else
已经有了更好的答案。但是它是松散的else返回单元还是匹配错误?这不是有效的语法
val a = user match {
  case Member(_, Location(_, Some(name))) => doSomething(name)
}