मुझे "मनमानी विशेषताओं की परिभाषा" पसंद है और मुझे लगता है कि रूबी में ओपनस्ट्रक्चर कभी-कभी हैश का उपयोग करने से क्लीनर महसूस करता है, लेकिन मुझे लगता है कि अन्य विशिष्ट फायदे हैं या ऐसे मामलों का उपयोग करें जो ओपनस्ट्रक्चर को बेहतर विकल्प बनाते हैं बस एक हैश का उपयोग कर।मुझे हैश के बजाय ओपनस्ट्रक्चर का उपयोग कब करना चाहिए?
उत्तर
मुझे लगता है कि यह ज्यादातर एक प्रदर्शन निर्णय के लिए आता है। Ruby Documentation:
एक ओपनस्ट्रक्चर रूबी की विधि लुकअप संरचना का उपयोग करता है और गुणों के लिए आवश्यक विधियों को ढूंढता और परिभाषित करता है। यह विधि method_missing और define_method विधि के माध्यम से पूरा किया जाता है।
यह माना जाना चाहिए कि बनाई गई वस्तुओं के प्रदर्शन के बारे में कोई चिंता है, क्योंकि हैश या स्ट्रक्चर का उपयोग करने की तुलना में इन गुणों की सेटिंग में बहुत अधिक ओवरहेड है।
इसके अतिरिक्त, एक Hash
की तरह कुछ तरीकों यह प्रदान करता है (has_key?
, include?
, आदि) के सभी के साथ अतिरिक्त कार्यक्षमता है। OpenStruct
उस दृष्टिकोण से एक बहुत ही सरल वस्तु है, लेकिन यदि आपको प्रदर्शन दृष्टिकोण से कोई चिंता नहीं है और केवल OpenStruct
के साथ काम करने के लिए एक आसान वस्तु चाहते हैं, तो यह एक अच्छा विकल्प है। जब आप कुछ की जरूरत है एक निश्चित विधि कॉल इंटरफेस (यानी एक बतख टाइप वस्तु #name
और #value
का जवाब देने में भेज) फिट करने के लिए, या जब आप कार्यान्वयन विवरण संपुटित करना चाहते हैं, लेकिन यह भी बचना चाहते हैं
रूबी 1.9.3 (कम से कम) में एक और सावधानी के रूप में, पहला कार्य तब किया जाता है जब ओपनस्ट्रक्चर बनाया जाता है, बजाय पहले विधि के उपयोग के बजाए। यह ओपनस्ट्रक्चर महंगा बनाता है, भले ही आप कभी भी किसी भी सदस्य फ़ंक्शन तक पहुंच न लें। (यह नहीं पता कि यह बाद के संस्करण में तय किया गया है)। – MZB
OpenStruct
वस्तुओं उपयोगी होते हैं समाधान इंजीनियरिंग। वे एक भयानक स्टब ऑब्जेक्ट भी बनाते हैं, और जब मैं स्टब/मॉक के ओवरहेड की आवश्यकता नहीं करता हूं तो मैं अक्सर फ्रेमवर्क स्टब्स के स्थान पर उनका उपयोग करता हूं।
+1 परीक्षण में उनके उपयोग का जिक्र करने के लिए। मैं एपीआई/वेब सेवा कॉल का परीक्षण करते समय डेटा के HTTP से संबंधित बिट्स को दबाकर बड़े पैमाने पर उनका उपयोग करता हूं। एक बार जब आप इसे लटका लेंगे तो बहुत बढ़िया होगा। –
ओएस तेह धीमा है, लेकिन प्रोटोटाइप के लिए बहुत अच्छा है। –