यह कॉन्वेंटेंट हो सकता है, खासकर जब आप Reads[A]
को JsValue => A
के एक समृद्ध रूप के रूप में देखते हैं।
लेकिन .... implicitness।
Reads[A]
न केवल सिर्फ एक रास्ता JsValue
से कन्वर्ट करने के लिए A
के लिए है, यह तरीका है।
तो अगर हम
sealed trait Foo
case class Bar(a: Int)
case class Baz(b: Int)
था आप एक Reads[Bar]
परिभाषित हैं, तो आप भी (सहप्रसरण साथ) एक Reads[Foo]
होगा।
यह थोड़ा अजीब हो सकता है।
object Foo {
implicit reads: Reads[Foo] =
implicitly[Reads[Bar]].orElse[implicitly[Reads[Baz]]]
}
object Bar {
implicit reads = Json.reads[Bar] // {"a":0}
}
object Baz {
implicit reads = Json.reads[Baz] // {"b":0}
def blah(jsValue: JsValue): Foo = jsValue.as[Foo]
}
object Main {
def blah(jsValue: JsValue): Foo = jsValue.as[Foo]
}
Baz.blah
और Main.blah
में क्या हो रहा है? पूर्व Baz.reads
का उपयोग करता है, और बाद में (जटिल) निहित संकल्प आदेश के कारण Foo.reads
का उपयोग करता है।
यह बढ़त मामला है, और मैं अभी भी लगता है कि आप सहप्रसरण के लिए एक अच्छा तर्क कर सकता है, लेकिन यह बीच का अंतर दिखाने करता है "बात संभवतः Foo
में JSON पार्स कर सकते हैं" और "बात यह है कि सभी में JSON पार्स कर सकते हैं संभव Foo
"।
स्रोत
2015-10-04 01:56:11
धन्यवाद, निहितार्थ मामला है, जैसा कि मैंने सोचा था। क्या आप जिस्ट पर टिप्पणी कर सकते हैं। आपकी राय क्या है, क्या कोई लिखना चाहिए [चाइल्ड]। मैप (x => x) 'या' पढ़ता है [चाइल्ड] .as [पढ़ता है [अभिभावक]] ', क्या बाद में कुछ गलत हो सकता है? – phadej
@ फीडेज, क्या आपका मतलब '.asInstanceOf' है? किसी भी मामले में, मुझे नहीं लगता कि इस प्रकार के विस्तार के साथ कुछ भी बुरा है। एकमात्र समस्या यह है कि यह स्वचालित रूप से implicits के लिए किया जाता है। –