सी # IDisposable
इंटरफेस के साथ using
है। जावा 7+ try
के साथ समान कार्यक्षमता और AutoCloseable
इंटरफ़ेस है। स्कैला आपको इस मुद्दे पर अपना स्वयं का कार्यान्वयन चुनने देता है।सरल स्काला पैटर्न "का उपयोग कर/कोशिश-संसाधनों के साथ" (स्वचालित संसाधन प्रबंधन)
स्केला हाथ के लोकप्रिय विकल्प हो रहा है, और typesafe कर्मचारियों में से एक द्वारा बनाए रखा है। हालांकि, यह इतना आसान व्यवहार के लिए बहुत जटिल लगता है। स्पष्ट करने के लिए उपयोग निर्देश आसान है, लेकिन कैसे समझ कि सभी कोड आंतरिक रूप से काम कर रहा है बल्कि जटिल है।
मैं सिर्फ निम्नलिखित सुपर सरल एआरएम समाधान लिखा है:
object SimpleARM {
def apply[T, Q](c: T {def close(): Unit})(f: (T) => Q): Q = {
try {
f(c)
} finally {
c.close()
}
}
}
- वहाँ सरल हाथ की तरह कुछ करने के लिए कोई लाभ है? ऐसा लगता है कि सभी अतिरिक्त जटिलताओं को अतिरिक्त लाभ प्रदान करना चाहिए।
- आम तौर पर, सार्वजनिक कोड, ओपन सोर्स, लाइब्रेरी का उपयोग करना बेहद बेहतर है जो कस्टम कोड का उपयोग करने पर सामान्य उद्देश्य व्यवहार के लिए दूसरों द्वारा समर्थित है।
- किसी को भी किसी भी सुधार की सिफारिश कर सकते हैं?
- क्या इस सरल दृष्टिकोण के लिए कोई सीमाएं हैं?
AFAIK, "सी" के प्रकार के प्रतिबिंब के आधार पर किया जाता है, प्रदर्शन के मामले में समस्याग्रस्त किया जा सकता है जो और जब पुनर्रचना या Bytecode कहानियो का उपयोग कर। इसके बजाए, मैं बस java.lang.AutoCloseable प्रकार का पुन: उपयोग करूंगा। –
आपका कोड 'c' == शून्य केस संभाल नहीं करता है। और यह अस्पष्ट है कि अगर बंद() एक अपवाद फेंकता है तो कौन सा अपवाद फेंक दिया जाएगा। –
क्योंकि मुझे कई java.lang.AutoCloseable उदाहरणों को घोंसला करने में सक्षम होना चाहिए, जिनमें से प्रत्येक पहले सफलतापूर्वक तत्काल तत्काल पर निर्भर करता है, अंत में मैंने एक पैटर्न पर मारा जो मेरे लिए बहुत उपयोगी रहा है। stackoverflow.com/a/34277491/501113 – chaotic3quilibrium