मैंने कल स्कैला सीखना शुरू किया, इसलिए मैं इसके लिए बहुत नया हूं। एक नई भाषा सीखते समय मुझे एक चीज करना पसंद है जो माइक्रो-टीडीडी लिब बनाने की कोशिश कर रहा है।स्कैला - मैं "assertThrows" विधि कैसे करूं?
यह मैं अब तक क्या मिला है:
def assert(condition: Boolean, message: String) {
if(!condition){ throw new AssertionError(message) }
}
def assertThrows[E](f: => Unit) {
try {
f
} catch {
case e: E => { return }
case _: Exception => { }
}
throw new AssertionError("Expected error of type " + classOf[E])
}
कोड assert
के लिए काम करता है ठीक है, लेकिन मैं assertThrows
के साथ दो समस्याएं आ रही हैं।
- ऐसा लगता है कि मैं अंतिम पंक्ति पर
E
उपयोग नहीं कर सकते। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, मुझेclass type expected but E found error
मिलता है। - अगर मैं अंतिम पंक्ति से ई निकाल सकते हैं (यह
throw new AssertionError("error expected")
द्वारा की जगह, उदाहरण के लिए) मैं इस मिल:warning: abstract type E in type pattern is unchecked since it is eliminated by erasure
मुझे लगता है कि दोनों समस्याओं मैं आ रही है जिस तरह से स्काला के साथ संबंधित हैं (और शायद जावा) अमूर्त प्रकारों से संबंधित है, और वे कैसे किए जाते हैं।
मैं अपने assertThrows ठीक कर सकते हैं?
बोनस अंक: जिस तरह से मैं एक "ब्लॉक प्रकार" (f: => Unit
) सही निर्दिष्ट करने कर रहा हूँ है?
एक प्रश्न जो मैंने बहुत पहले नहीं किया था, मदद की जा सकती है: http://stackoverflow.com/questions/7699709/scala-expected-exception-snippet –