这是一个简单的问题,我无法弄清楚:
以下代码给出以下编译错误:
def parseJson(q: String) = Option[JsValue]{
try{
Json.parse(q)
}catch{
case e: com.codahale.jerkson.ParsingException => None
}
}
错误
[error] found : None.type (with underlying type object None)
[error] required: play.api.libs.json.JsValue
[error] case e: com.codahale.jerkson.ParsingException => None
考虑到我的响应类型是 Option[JsValue],为什么我不能返回 None?
您实际上想将
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
}
}
但无论如何,你应该更喜欢使用 scala.util.control.Exception:
import scala.util.control.Exception._
catching(classOf[com.codahale.jerkson.ParsingException]).opt(Json.parse(q))
我认为您只是错误定义了方法定义的语法。按照您编写的方式,您将在 try/catch 块的结果上调用
Option.apply
。我想你是想写这个:
def parseJson(q: String): Option[JsValue] = {
try {
Some(Json.parse(q))
} catch {
case e: com.codahale.jerkson.ParsingException => None
}
}