Monday, 15 March 2010

oop - Inheritance caching patterns in ruby -


कहें कि मेरे पास एक अभिभावक वर्ग है:

  वर्ग stat def val raise "विधि होना चाहिए उपवर्ग "एंड एंड  

और एक उपवर्ग द्वारा कार्यान्वित:

  class MyStat & lt; Stat def val # costp calculations and return value value end  

अभिभावक वर्ग को विस्तारित करने के आधार पर, मैं उप-वर्ग को "वाल के वापसी मूल्य को कैशिंग के बारे में चिंता करने की ज़रूरत नहीं चाहूंगा " तरीका।

ऐसे कई पैटर्न हैं जो इस प्रभाव में यहां काम कर सकते हैं, और मैंने कई आकारों के लिए कोशिश की है, लेकिन इनमें से कोई भी मुझे सही नहीं समझता है और मुझे पता है कि यह एक हल समस्या है, इसलिए यह मूर्खतापूर्ण लगता है समय और प्रयास बर्बाद इसका सबसे अधिक निपटा कैसे किया जाता है?

इसके अलावा, यह मेरे लिए हुआ है कि मैं गलत सवाल पूछ रहा हो सकता है शायद मुझे इसके बजाय विरासत का उपयोग करना चाहिए, लेकिन इसके बजाय संरचना

किसी भी और सभी विचारों की सराहना की गई

संपादित करें:

समाधान के साथ मैं निम्नलिखित के रूप में समझा सकता है:

  वर्ग stat def value @value || = build_value end def build_value # उप-क्लास एंड एंड <   

आमतौर पर मैं एक सरल पैटर्न का उपयोग करता हूं विरासत की उपस्थिति: <पूर्व> वर्ग अभिभावक def val @val = = calculate_val समाप्ति def calculate_value विफल "कार्यान्वयन लापता" अंत अंत कक्षा बाल & lt; माता-पिता def calculate_val # कुछ महँगा कंप्यूटेशन एंड एंड

मैं अपने स्वयं के तरीके या विधियों में जटिल और महंगी तर्क को लपेट करना पसंद करता हूं, जिनके बारे में पता नहीं है कि उनका रिटर्न वैल्यू होगा। यह आपको चिंताओं का एक क्लीनर अलग देता है; एक तरीका कैशिंग के लिए है, एक विधि कंप्यूटिंग के लिए है।

यह भी कैशिंग तर्क को ओवरराइड किए बिना तर्क को ओवरराइड करने का एक अच्छा तरीका देता है।

सरल उदाहरण में ऊपर, मेमोआइज्ड विधि val बहुत अनावश्यक है लेकिन पैटर्न यह आपको ऐसे तरीकों को याद दिलाने देता है जो तर्क को स्वीकार करते हैं, या जब वास्तविक कैशिंग कम तुच्छ है, कैशिंग और कंप्यूटिंग के बीच जिम्मेदारियों को अलग रखने के लिए:

  def is_prime (n) @is_prime | | = {} @आईएस_प्रिम [एन] || = कम्प्यूट_आईएसआईप्रिम समाप्ति  

No comments:

Post a Comment