मैं कन्स्ट्रक्टर तर्कों की जांच करना चाहता हूं और तर्क सेट मान्य नहीं होने पर IllegalArgumentException
फेंकने से इंकार कर देता हूं (मान अपेक्षित बाधाओं में फिट नहीं होते हैं)। स्कैला में इसे कैसे कोड करें?कन्स्ट्रक्टर तर्कों की जांच कैसे करें और अपवाद फेंकें या स्कैला में एक डिफ़ॉल्ट कन्स्ट्रक्टर में दावा करें?
उत्तर
स्कैला में, कक्षा का पूरा शरीर आपका प्राथमिक निर्माता है, इसलिए आप वहां अपना सत्यापन तर्क जोड़ सकते हैं।
class Foo(val i: Int) {
require(i >= 0, "the number must be non-negative.")
}
एक बेहतर दृष्टिकोण एक कारखाने विधि है कि एक scalaz.Validation[String, Foo]
एक फेंकने के बजाय देता है प्रदान करने के लिए हो सकता है:
scala> class Foo(val i: Int) {
| if(i < 0)
| throw new IllegalArgumentException("the number must be non-negative.")
| }
defined class Foo
scala> new Foo(3)
res106: Foo = [email protected]
scala> new Foo(-3)
java.lang.IllegalArgumentException: the number must be positive.
स्काला एक उपयोगिता विधि require
इस प्रकार आप और अधिक संक्षेप में एक ही बात लिख देता है कि प्रदान करता है अपवाद। (नोट: स्कालाज़ की आवश्यकता है)
scala> :paste
// Entering paste mode (ctrl-D to finish)
class Foo private(val i: Int)
object Foo {
def apply(i: Int) = {
if(i < 0)
failure("number must be non-negative.")
else
success(new Foo(i))
}
}
// Exiting paste mode, now interpreting.
defined class Foo
defined module Foo
scala> Foo(3)
res108: scalaz.Validation[java.lang.String,Foo] = Success([email protected])
scala> Foo(-3)
res109: scalaz.Validation[java.lang.String,Foo] = Failure(number must be non-negative.)
scala> class Foo(arg: Int) {
| require (arg == 0)
| }
defined class Foo
scala> new Foo(0)
res24: Foo = [email protected]
scala> new Foo(1)
java.lang.IllegalArgumentException: requirement failed
अच्छा! सवाल का सही जवाब क्या है। क्या आप 'आवश्यकता' काम के विवरण के बारे में विस्तार से थोड़ा (या विस्तार से लिंक) विस्तृत कर सकते हैं? –
यहां 'काम की आवश्यकता' की आवश्यकता है, @ डैन-बर्टन ;-) http://pastebin.com/rJQfTCX9 यह तर्क गलत है, तो यह सिर्फ 'नया IllegalArgumentException ("आवश्यकता विफल") फेंकता है। अपवाद को फेंकने के बजाय 'आवश्यकता' का उपयोग करने का पूरा विचार स्वयं को अपने कोड को सुंदर विश्लेषण और स्थिर विश्लेषण के लिए उपयुक्त बनाना है (जो अभी तक लागू नहीं हुआ है)। – Ivan
- 1. एनम कन्स्ट्रक्टर से अपवाद कैसे फेंकें?
- 2. बेस में डिफ़ॉल्ट कन्स्ट्रक्टर के बिना, व्युत्पन्न कक्षा में कॉपी कन्स्ट्रक्टर की घोषणा कैसे करें?
- 3. डिफ़ॉल्ट कन्स्ट्रक्टर
- 4. सी ++ कन्स्ट्रक्टर में अपवाद उन्मूलन
- 5. डिफ़ॉल्ट तर्क के साथ स्कैला कन्स्ट्रक्टर एक और तर्क
- 6. स्टेटिक कन्स्ट्रक्टर और अपवाद
- 7. एक जेनेरिक रिपोजिटरी में डिफ़ॉल्ट कन्स्ट्रक्टर स्ट्रक्चरमैप को परिभाषित करें
- 8. डिफ़ॉल्ट कन्स्ट्रक्टर
- 9. डिफ़ॉल्ट कन्स्ट्रक्टर
- 10. जावा में डिफ़ॉल्ट कन्स्ट्रक्टर और विरासत
- 11. कन्स्ट्रक्टर या कॉपी कन्स्ट्रक्टर?
- 12. पॉइंटर्स और गैर-डिफ़ॉल्ट कन्स्ट्रक्टर
- 13. कन्स्ट्रक्टर में या कक्षा
- 14. कॉपी कन्स्ट्रक्टर और डिफॉल्ट कन्स्ट्रक्टर
- 15. एक गैर-डिफ़ॉल्ट कन्स्ट्रक्टर के लिए तर्क कैसे पास करें?
- 16. स्कैला में संक्षेप में शून्य या झूठी जांच कैसे करें?
- 17. कन्स्ट्रक्टर में IDictionary को कैसे प्रारंभ करें?
- 18. कन्स्ट्रक्टर में कॉल बेस कन्स्ट्रक्टर और अन्य कन्स्ट्रक्टर
- 19. आर में दावा कैसे करें?
- 20. कॉपी कन्स्ट्रक्टर सी ++ में डिफ़ॉल्ट कन्स्ट्रक्टर को क्यों छुपाता है?
- 21. डिफ़ॉल्ट कन्स्ट्रक्टर (सी ++)
- 22. MySQL - संग्रहित प्रक्रिया में अपवाद कैसे फेंकें?
- 23. स्कैला अतिरिक्त नो-एर्ग कन्स्ट्रक्टर प्लस डिफॉल्ट कन्स्ट्रक्टर पैरामीटर
- 24. डिफ़ॉल्ट कन्स्ट्रक्टर को कैसे हटाएं?
- 25. स्कैला सहायक कन्स्ट्रक्टर
- 26. स्कैला ऐरे कन्स्ट्रक्टर?
- 27. कोबजेक्ट की कॉपी कन्स्ट्रक्टर और असाइनमेंट को अक्षम क्यों करें
- 28. आवश्यक डिफ़ॉल्ट कन्स्ट्रक्टर को संभालने के लिए कैसे करें
- 29. ओवरलोड "बेस" कन्स्ट्रक्टर या "यह" कन्स्ट्रक्टर?
- 30. सीएक्सएफ: तर्कों के साथ जैक्सबी कन्स्ट्रक्टर उत्पन्न करें
+1 अच्छा स्पष्टीकरण –
पेस्ट मोड के बारे में नहीं पता था, +1 :) – wbarksdale
इसका मतलब है कि स्कैला एक महान भाषा है – Pooya