1

我有一段代码从请求正文中提取字符串,但它可能不存在,所以它是一个Option[String]. 如果有一个值,那么我希望隐式使用它。

为了进行这种转换,我写了implicit val code = googleCode.

有没有办法制作googleCode一个隐式String 以便我可以直接使用它而不是创建一个implicit val值为 的googleCode

    request.getQueryString("code") match {
      case None => 
        Logger.error("unable to retrieve authentication code from google request")
        Redirect(routes.Application.index())

      case Some(googleCode) => Async {
        implicit val code: String = googleCode // <== CONVERTING TO AN IMPLICIT
        Logger.debug("retrieved authentication code, proceeding to get token")
        ...
        Ok("congratulations, ${user.name}, you are logged in!")

请注意,代码片段来自 Playframework 控制器,但这通常是 Scala 语言的问题

4

2 回答 2

6

通常建议避免将模式匹配与 Options 一起使用。以下是您可以编写它的方法:

request.getQueryString("code") map { implicit googleCode =>
  // googleCode is an implicit String! do something with it
} getOrElse {
  // handle the None case
}
于 2013-09-13T01:27:40.007 回答
0

唔。我建议不要寻找将使用 Option 的代码转换为某种 Java 的解决方案,而是采取这三个简单的步骤。

步骤 1. 做任何对你来说最短的事情,比如 option.get(),任何事情,这样你的代码(有点)就可以工作。步骤 2. 学习函数式编程。具体来说,学习以惯用的、特别是 FP 风格的方式使用 Option。步骤 3. 利润。你会从学习中受益良多。

于 2013-09-13T02:59:37.213 回答