我有以下代码:
val userName = users.get(userID) match {
case Some(user) => user.name
case None => "Invalid User ID"
}
有没有更简洁的方式来写这个?
我想知道是否有类似getOrElse
的内容可以让我在成功时提取函数(提取用户名),或者返回一个普通值。
答案 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
。