मुझे लगता है कि आईएमओ, 1-लाइनर होना चाहिए, जो मुझे सरल कोशिश/पकड़ ब्लॉक को दोहराता है।स्कैला ड्रवाईइंग प्रयास/पकड़
उदाहरण के लिए, मान लें कि मुझे यूरी स्ट्रिंग दिनांक को योडिमेड प्रारूप में जोडा-टाइम में परिवर्तित करने की आवश्यकता है। एक मानक ट्राई/कैच के साथ ब्लॉक रूपांतरण विधि लगता है:
def ymd2Date(ymd: Option[String]) = ymd match {
case Some(date) =>
try { Right(ymdFormat.parseDateTime(date)) }
catch { case e =>
log.info(e.getMessage)
Left(None)
}
case None =>
Left(None) // no uri date param
}
val ymdFormat = DateTimeFormat.forPattern("yyyyMMdd")
वर्क्स काफी अच्छी तरह से, आशय स्पष्ट है, लेकिन जब मैं, सभी गैर महत्वपूर्ण घटनाओं के लिए प्रवेश फिर मैं ट्राई/कैच इस तरह का कर इसे बाहर निकालने का एक तरीका तलाशें। खोज ने मुझे scala.util.control.Exception पर SO post पर ले जाया। सहायक, लेकिन यह अभी भी थोड़ा मुश्किल है/इसे जिस तरह से मैं चाहता हूं उसे काम करना मुश्किल है। सादे अंग्रेजी में मैं बस कहना चाहता हूं, "कुछ-क्रिया-परिणाम-परिणाम लॉग-त्रुटि-प्रकार पकड़ें"।
तो, मैं control.Exception का हिस्सा मैं में दिलचस्पी रखता हूँ के आधार पर यह पता हैक कर लिया (या समझ में उपयोगी होने के लिए):
class Catcher[T](f: => T) {
type Logger = (=> Any) => Unit
def either[T](logger: => Logger) = {
try { Right(f) }
catch { case e =>
logger(e.getMessage)
Left(None)
}
}
}
def catching[T](f: => T) = new Catcher(f)
और फिर कोशिश तो की तरह/कैच के स्थान पर उपयोग करें:
catching(ymdFormat.parseDateTime(date)) either log.info
, एक संदेश उपसर्ग, आदि विकल्प पर जोड़ सकते हैं, लेकिन ... यह शायद बेहतर होगा control.Exception ऊपर की तरह काम करने के लिए पाने के लिए एक रास्ता खोजने के लिए, के रूप में typesafe चालक दल के लिए जा रहा है कोड की दुनिया को बेहतर बनाने के लिए मैं कभी भी लिखने की कल्पना करूंगा।
क्या कोई जानता है कि नियंत्रण का उपयोग करके इस तरह के वाक्यविन्यास को कैसे बनाया जाए। अपवाद जहां कोई कैच ब्लॉक में उपयोग किए जाने वाले नाम से लॉगर फ़ंक्शन में पास हो सकता है? अगर वहाँ control.Exception के लिए एक "उपयोग के मामलों"
में मज़ा नहीं आएगा, लेकिन मैं महसूस कर रही इस उपयोगिता और अधिक उन्नत स्काला devs
आप 'या तो' का उपयोग क्यों करते हैं? यदि आप 'वाम' में डाल रहे हैं तो 'कोई नहीं' है, तो ऐसा लगता है कि आप 'विकल्प [टी] 'का उपयोग कर सकते हैं। – huynhjl
अच्छा बिंदु, मैं परिणाम को फोल्ड करना चाहता था और या तो एक प्राकृतिक फिट की तरह लग रहा था ... – virtualeyes
जो कहने के लिए है, वर्तमान में कोई विकल्प नहीं है, या कम से कम – virtualeyes