在Scala中返回None而不是Option会产生编译错误

dgr*_*des 1 scala playframework-2.0

这是一个我无法弄清楚的简单问题:

以下代码给出以下编译错误:

def parseJson(q: String) = Option[JsValue]{
    try{
            Json.parse(q)
    }catch{
        case e: com.codahale.jerkson.ParsingException => None
    }
}
Run Code Online (Sandbox Code Playgroud)

错误

[error]  found   : None.type (with underlying type object None)
[error]  required: play.api.libs.json.JsValue
[error]             case e: com.codahale.jerkson.ParsingException => None
Run Code Online (Sandbox Code Playgroud)

为什么我不能返回没有考虑我的响应类型是Option [JsValue]?

Alo*_*ard 10

实际上你想把Json.parse(q)放到Some()中,而不是将整个代码包装在一个Option [JsValue]中,而是用它作为签名:

def parseJson(q: String): Option[JsValue] = {
    try{
       Some(Json.parse(q))
    }catch{
       case e: com.codahale.jerkson.ParsingException => None
    }
}
Run Code Online (Sandbox Code Playgroud)

但无论如何你应该更喜欢使用scala.util.control.Exception:

 import scala.util.control.Exception._
 catching(classOf[com.codahale.jerkson.ParsingException]).opt(Json.parse(q))
Run Code Online (Sandbox Code Playgroud)