如何在Scala中检查case类参数是否有值
我有一个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") } 这些
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
,而不是选项的任何其他方法。虽然听起来询问者可能只是有一些更复杂的进一步工作,应该包括一个理解或什么的过程。