如何在Scala中检查case类参数是否有值

如何在Scala中检查case类参数是否有值,scala,playframework-2.0,case-class,Scala,Playframework 2.0,Case Class,我有一个case类QueryParams,如下所示: case class QueryParams( limit: Option[Integer] = None, refresh: Option[Boolean] = None, organisationalUnit: Option[String] = None) for (_ <- params.organizationalUnit) { throw new Exception("your error message") } 这些

我有一个case类
QueryParams
,如下所示:

case class QueryParams(
limit: Option[Integer] = None,
refresh: Option[Boolean] = None,
organisationalUnit: Option[String] = None)
for (_ <- params.organizationalUnit) {
  throw new Exception("your error message")
}
这些值
limit
refresh
organizationalUnit
实际上作为请求url中的查询参数传递给播放应用程序。 我需要编写一个代码来检查请求URL是否包含
OrganizationalUnit
的任何值,如果是,我需要抛出错误。如果不是,我需要继续执行进一步的操作。
这里有人能帮我吗

选项
s对这类事情很有用:

val params: QueryParams = ???

params.organizationalUnit.foreach(_ => throw new Exception("your error message"))
这样,只有在定义了
organizationalUnit
时才会抛出。您还可以将其表示为:

case class QueryParams(
limit: Option[Integer] = None,
refresh: Option[Boolean] = None,
organisationalUnit: Option[String] = None)
for (_ <- params.organizationalUnit) {
  throw new Exception("your error message")
}

后者可能是最具可读性的,尽管根据某些编码风格,它可能不太惯用。

stefanobaghino的回答很好,但我更喜欢这种情况下的模式匹配:

params.organisationalUnit match {
  case Some(_) => // processing
  case _ => //logging
}
如果需要其他值,可以匹配整个实例

params match {
  case QueryParams(Some(limit), Some(refresh), Some(organisationalUnit)) =>
  case QueryParams(mayBeLimit, mayBeRefresh, Some(organisationalUnit)) =>
  case _ =>
}

到目前为止你试过什么?比如,谷歌搜索一下?查看
选项
scaladoc?这是一个很好的完整答案。我只想补充一点,我怀疑任何人都不会对最后的解决方案有太大的异议。事实上,我确实更喜欢它。通常要避免的主要方法是
.get
,而不是
选项的任何其他方法。虽然听起来询问者可能只是有一些更复杂的进一步工作,应该包括一个理解或什么的过程。