मुझे पता है कि यह डिज़ाइन द्वारा है कि आप किसी ऑब्जेक्ट को नष्ट होने पर क्या होता है इसे नियंत्रित नहीं कर सकते हैं। मैं कुछ क्लास विधि को अंतिम रूप देने के बारे में भी जानता हूं।आरएआईआई (या, रुबी में संसाधन कैसे प्रबंधित करें)
हालांकि सी ++ के आरएआईआई के लिए रूबी मुहावरे (संसाधन कन्स्ट्रक्टर में शुरू किए गए हैं, विनाशक में बंद हैं)? त्रुटियों या अपवाद होने पर भी लोग वस्तुओं के अंदर उपयोग किए जाने वाले संसाधनों का प्रबंधन कैसे करते हैं?
सुनिश्चित काम करता है का उपयोग करना:
f = File.open("testfile")
begin
# .. process
rescue
# .. handle error
ensure
f.close unless f.nil?
end
लेकिन वर्ग के उपयोगकर्ताओं पूरे शुरू-बचाव-सुनिश्चित चाचा हर खुला विधि कॉल किया जाना चाहिए करने के लिए याद करने के लिए किया है।
उदाहरण के लिए, मैं निम्नलिखित वर्ग होगा:
class SomeResource
def initialize(connection_string)
@resource_handle = ...some mojo here...
end
def do_something()
begin
@resource_handle.do_that()
...
rescue
...
ensure
end
def close
@resource_handle.close
end
end
resource_handle यदि अपवाद कुछ अन्य वर्ग द्वारा कारण है और स्क्रिप्ट बाहर निकल जाता है बंद कर दिया नहीं किया जाएगा।
या समस्या है कि मैं अभी भी यह भी कर रहा हूं सी ++ - जैसे?
हालांकि यह काम करता है, आपको उस व्यक्ति पर निर्भर होना चाहिए जो सही काम करने के लिए आपकी कक्षा का उपयोग कर रहा है। उन्हें पूरी तरह से शुरू करने के लिए याद रखना होगा-सुनिश्चित करें कि प्रत्येक बार खुली विधि को बुलाए जाने की चाचा सुनिश्चित करें। मैं इस स्पष्ट को बनाने के लिए प्रश्न संपादित कर रहा हूं, लेकिन उत्तर के लिए धन्यवाद :) – moogs