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

时间:2017-07-05 09:54:08

标签: scala playframework-2.0 case-class

我有一个案例类QueryParams如下:

case class QueryParams(
limit: Option[Integer] = None,
refresh: Option[Boolean] = None,
organisationalUnit: Option[String] = None)

这些值limitrefreshorganisationalUnit实际上是作为播放应用程序的请求网址中的查询参数传递的。 我需要编写一个代码来检查请求URL是否包含organisationalUnit的任何值,如果是,我需要抛出错误。如果不是,我需要继续进行进一步的操作。 任何人都可以帮助我

2 个答案:

答案 0 :(得分:0)

Option对于这类事情非常有用:

val params: QueryParams = ???

params.organizationalUnit.foreach(_ => throw new Exception("your error message"))

这样,只有在定义organizationalUnit时才会抛出。您也可以表达如下:

for (_ <- params.organizationalUnit) {
  throw new Exception("your error message")
}

或者:

if (params.organizationalUnit.isDefined) {
  throw new Exception("your error message")
}

后者可能是最具可读性的,尽管根据某些编码风格可能不会被认为是非常惯用的。

答案 1 :(得分:0)

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 _ =>
}