3
我試圖包裝spray-json解析器,使其返回Option
而不是引發異常。如何在scala中的泛型方法中包裝泛型方法?
作爲第一步,我只是試圖用我自己的方法來包裝該方法,但我有問題使其通用。
解析器使用隱式格式對象(其被用於我使用的具體類型定義),但是當該方法是通用的編譯器會抱怨:
[error] Cannot find JsonReader or JsonFormat type class for T
[error] def parse[T](s: String): T = JsonParser(s).convertTo[T]
下面是相關的代碼:
case class Person(name: String)
object Protocols {
implicit val personFormat = jsonFormat1(Person)
}
import spray.json._
object Parser {
import com.rsslldnphy.json.Protocols._
// JsonParser(s).convertTo[Person] works fine, but..
def parse[T](s: String): T = JsonParser(s).convertTo[T] // .. doesn't
}
我需要做些什麼才能使其發揮作用?
王牌,謝謝你!不知道我是快捷方式的粉絲,所以我認爲我會堅持「更明確的隱含」,可以這麼說。 – Russell
我建議你習慣這種表示法,因爲它在慣用的scala代碼中很流行。實際上,只要將'JsonReader'看作一個類型類,這個符號就很有意義。請參閱http://stackoverflow.com/questions/5408861/what-are-type-classes-in-scala-useful-for –
我不一定要編寫慣用的Scala代碼。在我看來,Scala在簡潔性方面落在少數幾次,而這就是其中之一。 – Russell