क्योंकि errors
खाली List
हो सकता है, और आप A
टाइप करने के लिए खुद को बाध्य कर रहे हैं, मुझे नहीं लगता कि आप इसे कुल फ़ंक्शन के रूप में लिख सकते हैं। इस प्रकार के हस्ताक्षर को लिखने के लिए, खाली सूची केस का नाटक करके आपको धोखा देने की आवश्यकता होगी, उदाहरण के लिए नहीं है।
def reject[A](errors: List[String]): ValidationNEL[String, A] =
Failure(errors.toNel.get) // bad!
संपादित करें: Apocalisp के रूप में बताया, तो आप निश्चित रूप से इस कुल समारोह बना सकते हैं, खाली सूची के लिए एक त्रुटि शुरू करने से।
def reject[A](errors: List[String]): ValidationNEL[String, A] =
Failure(errors.toNel getOrElse NonEmptyList("Error: There were no errors!"))
क्यों एक के रूप में errors
पारित नहीं: लेकिन मैं सिर्फ यह है कि अगर errors
रनटाइम पर गणना की जाती है, और मुझे लगता है यह नहीं आपके उपयोग के मामले, के रूप में यह इस तरह के रूप मूर्खतापूर्ण त्रुटियों के लिए नेतृत्व करेंगे है क्या करना होगा NonEmptyList
इसके बजाय - संभवतः आप केवल इस फ़ंक्शन का उपयोग करते हैं यदि आपके पास संकलन समय पर उपयोग करने में त्रुटियां हैं।
def reject[A](errors: NonEmptyList[String]): ValidationNEL[String, A] =
Failure(errors)
आप NonEmptyList.apply
के हस्ताक्षर को कॉपी (और String
करने के लिए इसे विशेषज्ञता) द्वारा उपयोग करने के लिए इस terser बना सकते हैं:
def reject[A](h: String, t: String*): ValidationNEL[String, A] =
Failure(NonEmptyList(h, t: _*))
के लिए इसे बाहर की कोशिश करते हैं:
scala> reject("foo", "bar", "baz")
res0: scalaz.package.ValidationNEL[String,Nothing] = Failure(NonEmptyList(foo, bar, baz))
तुम सिर्फ कर सकता है खाली सूची भी एक त्रुटि :) – Apocalisp
यह सच है, मैंने उस बारे में नहीं सोचा (डुह)। यह उपयोगी होगा अगर रनटाइम पर 'त्रुटियों' की गणना की जाती है, लेकिन मुझे लगता है कि वह अपने कोड में अक्षर लिख रहे होंगे। मुझे संदेह है "ओह, आप teh कोड में त्रुटि लिखना भूल गए" रनटाइम पर एक उपयोगी त्रुटि होगी। –
या कुछ वास्तव में उपयोगी "त्रुटि: कोई त्रुटि नहीं थी।" – Apocalisp