更强大的getOrElse?

时间:2013-02-02 14:04:44

标签: scala

我有以下代码:

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

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

我想知道是否有类似getOrElse的内容可以让我在成功时提取函数(提取用户名),或者返回一个普通值。

2 个答案:

答案 0 :(得分: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

Option.fold在类型推断方面存在一些问题,对于潜在的陷阱,请参阅another回答。

答案 1 :(得分:4)

不是在一个方法调用中,而是在两个方法中:

users.get(userID).map(_.name).getOrElse("Invalid User ID")

根据@ sschaef的回答,哎呀,最后在Scala 2.10中添加了Option.fold