5

Option[Map[String,String]]一度にいくつかのキーを一致させることは可能ですか (たとえば、ネストされた一致なしで)?

次のスニペットは現在の様子です。

val myOption:Option[Map[String,String]] = ...
myOption match {
  case Some(params) =>
    params get(key) match {
      case Some(value) => Ok(value)
      case None => BadRequest
  case None => BadRequest     
}
4

3 に答える 3

9

もちろん!ちょうどflatMapそのsh*t

def lookup(o: Option[Map[String, String]], k: String) =
  o.flatMap(_ get k).map(Ok(_)).getOrElse(BadRequest)

OptionScala 2.10を使用している場合は、 :を折りたたむことができます。

def lookup(o: Option[Map[String, String]], k: String) =
  o.flatMap(_ get k).fold(BadRequest)(Ok(_))
于 2012-09-06T14:04:34.877 に答える
3
(for (params <- myOption; value <- params.get(key)) yield Ok(value)).getOrElse(BadRequest)
于 2012-09-06T14:06:50.713 に答える
1

いくつかの高階関数を使用してこれを行うことができるはずです。これはあなたが望むことだと思います:

myOption.collect {
  case m if (m contains key) => Ok(m(key))
} getOrElse BadRequest

collectは部分関数を取り、部分関数が をgetOrElse返したケースを処理します。これにより、ケースNoneが変換されますBadRequest

于 2012-09-06T14:14:11.117 に答える