这是一个我无法弄清楚的简单问题:
以下代码给出了以下编译错误:
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]?
答案 0 :(得分: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
}
}
但无论如何你应该更喜欢使用scala.util.control.Exception:
import scala.util.control.Exception._
catching(classOf[com.codahale.jerkson.ParsingException]).opt(Json.parse(q))
答案 1 :(得分:1)
我认为你刚刚弄错了方法定义的语法。您编写它的方式是在try / catch块的结果上调用Option.apply
。我想你打算写这个:
def parseJson(q: String): Option[JsValue] = {
try {
Some(Json.parse(q))
} catch {
case e: com.codahale.jerkson.ParsingException => None
}
}