私は次のコードを持っています:
val userName = users.get(userID) match {
case Some(user) => user.name
case None => "Invalid User ID"
}
これを書くためのより簡潔な方法はありますか?
getOrElse
成功した場合(ユーザー名を抽出するため)に関数を適用したり、そうでない場合はプレーンな値を返したりできるようなものがあるのではないかと思っていました。
私は次のコードを持っています:
val userName = users.get(userID) match {
case Some(user) => user.name
case None => "Invalid User ID"
}
これを書くためのより簡潔な方法はありますか?
getOrElse
成功した場合(ユーザー名を抽出するため)に関数を適用したり、そうでない場合はプレーンな値を返したりできるようなものがあるのではないかと思っていました。
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
型推論にいくつかの問題があります。潜在的な落とし穴については、別の回答を参照してください。
1つのメソッド呼び出しではなく、2つのメソッド呼び出しで:
users.get(userID).map(_.name).getOrElse("Invalid User ID")
Option.fold
@sschaefの回答によると、おっと、 Scala2.10でようやく追加されたようです。