2

我有以下代码:

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

有没有更简洁的写法?

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

4

2 回答 2

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类型推断有一些问题,对于潜在的陷阱,请参见另一个答案。

于 2013-02-02T14:13:22.860 回答
4

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

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

糟糕,Option.fold根据@sschaef 的回答,显然最终被添加到 Scala 2.10 中。

于 2013-02-02T14:11:09.847 回答