Scala模式匹配如果可以转换为某种类型

时间:2016-02-10 05:33:49

标签: scala playframework pattern-matching

我正在使用Scala Play框架来获取请求查询参数。

Play可以使用的唯一方法是:

val param: Option[String] = request.getQueryString("isXxxx")

然后我想做一些模式匹配,所以只有param是我想要继续的布尔类型,否则返回BadRequest。

只有param是Boolean类型的实例才能被处理,否则停止?那么我如何使用Scala模式匹配来实现这一目标呢?类似的东西:

param match {
  case ??? => xxxService.xxx({here is Boolean})
  case _ => BadRequest
}

不太确定关于它的语法不是None,而是布尔的类型。

2 个答案:

答案 0 :(得分:1)

您可以按如下方式匹配选项:

param match {
  case Some(x) => xxxService.xxx(x)
  case None => BadRequest
}

如果您不知道类型,可以使用:

模式匹配类型
param match {
  case x: Boolean => xxxService.xxx(x)
  case _ => BadRequest
}

答案 1 :(得分:0)

您可以使用自定义提取器

来完成
object boolean {
  def unapply(s: String) = try {
    Some(s.toBoolean)
  } catch {
    case e: IllegalArgumentException => None
  }
}

并像这样匹配:

param match {
  case Some(boolean(x)) => xxxService.xxx({here is Boolean})
  case _ => BadRequest
}

在Scala库中没有类似的东西,但你必须自己提供它。