2012-02-28 16 views
7

क्या अंत में ब्लॉक के भीतर प्रयास/पकड़ ब्लॉक में बनाए गए वैल का उपयोग करने का कोई तरीका है? या आखिर में दायरे से बाहर ब्लॉक है।आखिरकार एक कोशिश/पकड़ ब्लॉक में "दायरे से बाहर"

def myTryCatch: Either[Exception, String] = { 
    try { 
    val w = runOrFailWithException("Please work...") 
    Right(w) 
    } catch { 
    case ex: Exception => { 
     Left(ex) 
    } 
    } 
    finally { 
    // How do I get access to Left or Right in my finally block. 
    // This does not work 
    _ match { 
     case Right(_) => 
     case Left(_) => 
    } 
    } 
} 
+1

आप नहीं, अंत में केवल सामान, ट्राई/कैच क्षेत्र से बाहर घोषित इसके अंदर नहीं देख सकता है। –

उत्तर

12

आपको finally ब्लॉक में ऐसा करने की आवश्यकता क्यों है? के बाद से एक try/catch एक अभिव्यक्ति है, तो आप अपने मूल्य पर मिलान कर सकते हैं:

try { 
    val w = runOrFailWithException("Please work...") 
    Right(w) 
} catch { 
    case ex: Exception => Left(ex) 
} match { 
    case Right(_) => 
    case Left(_) => 
} 
+0

धन्यवाद, यह बहुत अच्छी तरह से काम कर रहा है। बेशक, मुझे यहां 'आखिरकार' की आवश्यकता नहीं है। - जावा अभी भी मेरे सिर के पीछे कहीं है। –

+1

असल में आपको ईवेंट को एक मैच की आवश्यकता नहीं है;) केवल वही करें जो आप मूल्यों के साथ चाहते हैं और कोशिश करें और फिर "वापसी" करें) – tuxSlayer

+0

यदि जावा अभी भी आपके सिर के पीछे है तो आपको पता होना चाहिए कि स्कोप नियमों को आजमाएं ..catch .. अंत में जावा में एक ही हैं। –

संबंधित मुद्दे