Scala中的多个Option值

jcm*_*jcm 7 scala

我正在解析三个请求参数,所有这些参数都包含在一个Option类型中.如果这些选项中有任何一个None,那么我想返回400错误.如何检查这些返回值是否属于None何种类型?

Mar*_*ing 18

为什么不这样呢?

if (o1.isEmpty || o2.isEmpty || o3.isEmpty) BadRequest("Foo")
Run Code Online (Sandbox Code Playgroud)

Alternativeley取决于您的实施,您可能在某种集合中有您的选择.然后你可以使用exists

if (parsedRequestParameters.exists(_.isEmpty)) BadRequest("Foo")
Run Code Online (Sandbox Code Playgroud)

您可能想要的第三种选择,以防您想要对选项的内容执行某些操作:

val response = for {
  v1 <- o1
  v2 <- o2
  v3 <- o3
} yield <some response depending on the values of o1..o3>

response getOrElse BadRequest("something wasn't specified")
Run Code Online (Sandbox Code Playgroud)


Dom*_*her 12

另一种可能性,为完整性添加:

(o1, o2, o3) match {
  case(Some(p1), Some(p2), Some(p3)) => Ok // Do stuff with p1, p2, p3
  case _ => BadRequest
}
Run Code Online (Sandbox Code Playgroud)