How could metaprogramming be used to reduce redundancy in this Ruby code? -
<कोड> वर्ग डिवाइस डीईएफ़ प्रारंभ (DEVICE_ID, data_resource) @id = DEVICE_ID @data_resource = data_resource अंत डीईएफ़ display_device मोड = @ data_resource.get_display_device_mode (@id) प्रीसेट = @ data_resource.get_display_device_presets (@id) सारांश = "display_device: # {मोड} ($ # {प्रीसेट})" वापसी "* # {सारांश}" अगर प्रीसेट == "XTC909" सारांश अंत डीईएफ़ चिप मोड = @ data_resource.get_chip_mode (@id) प्रीसेट = @ data_resource.get_chip_presets (@id) सारांश = "चिप: # {मोड} ($ # {प्रीसेट})" वापसी "* # {सारांश}" प्रीसेट अगर == "XTC909" सारांश अंत डीईएफ़ input_device मोड = @ data_resource.get_input_device_mode (@id) प्रीसेट = @ data_resource.get_input_device_presets (@id) सारांश = "input_device: # {मोड} ($ # {प्रीसेट})" वापसी "* # {सारांश} "यदि presets ==" XTC909 "सारांश के अंत का अंत
जैसा कि आप ऊपर दिए गए कोड से देख सकते हैं, वहाँ बहुत कम है redundan तरीकों के भीतर सीआई चाहे इस अतिरेक को कम करने का सबसे अच्छा तरीका मेटाप्रोग्रामिंग है , मुझे यह जानने की उम्मीद है कि रूबी में मेटाप्रोग्रामिंग का उपयोग करने के लिए कुछ पुनरावृत्ति को कम करने के लिए अगर कोई कुछ सुझाव प्रदान कर सकता है।
< / Div>
यहाँ एक ऐसा संस्करण है जो मेटाप्रोग्रामिंग का उपयोग करता है, हालांकि मैं उस पद्धति में डालकर यह डुप्लिकेशेशन को निकाल देता हूं जहां यह संबंधित है। / p>
<कोड> वर्ग डिवाइस डीईएफ़ प्रारंभ (DEVICE_ID, data_resource) @id = DEVICE_ID @data_resource = data_resource अंत डीईएफ़ resource_summary (RESOURCE_NAME) मोड = @ data_resource.send ( "मिल _ # {RESOURCE_NAME} _mode", @id ) Presets = @ data_resource.send ("get_ # {resource_name} _presets", @id) सारांश = "# {resource_name}: # {मोड} ($ # {प्रिसेट्स}}" वापसी "* # {सारांश}" अगर प्रीसेट == "XTC909" सारांश अंत डीएफ़ self.resource_accessor (* नाम) names.each {| संसाधन | Define_method (संसाधन) {resource_summary संसाधन}} अंत resource_accessor: display_device,: चिप,: input_device end
यदि आप वास्तव में उस कार्यक्षमता के लिए एक विधि बनाना नहीं चाहते थे, तो आप इसे बदल सकते हैं संसाधन_समुरी
पद्धति को संसाधन_समुरी
विधि के शरीर से कॉल करें।
Comments
Post a Comment