更强大的getOrElse?

Edu*_*rdo 2 scala

我有以下代码:

val userName = users.get(userID) match {
  case Some(user) => user.name
  case None => "Invalid User ID"
}
Run Code Online (Sandbox Code Playgroud)

有没有更简洁的方式来写这个?

我想知道是否有类似的东西getOrElse,如果它成功(提取用户名),我会应用一个函数,否则返回一个普通值.

kir*_*uku 12

scala> Map("a" -> 1).get("a").fold("invalid user id")("value:"+_)
res15: String = value:1

scala> Map("a" -> 1).get("b").fold("invalid user id")("value:"+_)
res16: String = invalid user id
Run Code Online (Sandbox Code Playgroud)

Option.fold类型推断存在一些问题,因为潜在的陷阱会看到另一个答案.