2016-02-10 21 views
0

我正在使用Scala Play框架来获取请求查询参数。斯卡拉模式匹配,如果可以转换为某种类型

我可以播放使用的唯一方法是:

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

然后,我想做一些模式匹配,所以只有一个参数是布尔类型我想继续,否则返回一个错误请求。

只有参数是一个布尔类型的实例才能被处理,否则停止?那么如何使用Scala模式匹配来实现呢?类似于:

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

不太确定关于匹配的语法,它既不是无,也不是布尔类型。

回答

1

如下您可以匹配的选项:

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

如果你不知道类型,你可以在类型模式匹配使用:

param match { 
    case x: Boolean => xxxService.xxx(x) 
    case _ => BadRequest 
} 
+0

对于第二个例子,我可以根据选项进行打字。把第一和第二个例子放在一起。 – ttt

+0

@ttt你可以,但只有当你真的不知道变量的类型时才有必要。 Scala通常能够推断出类型,只需要匹配'Option',而不是类型。 – Squimmy

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库中没有这样的东西,但您必须自己提供它。