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

1つのメソッド呼び出しではなく、2つのメソッド呼び出しで:

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

Option.fold@sschaefの回答によると、おっと、 Scala2.10でようやく追加されたようです。

于 2013-02-02T14:11:09.847 に答える