क्या कोई विधि तर्क सूची में एक आवृत्ति परिवर्तनीय नाम निर्दिष्ट करने की कॉफीस्क्रिप्ट सुविधा के समान रूबी व्यवहार को लागू करने की कोई योजना है? रूबी: विधि तर्क के रूप में स्वचालित रूप से आवृत्ति चर सेट करें?
तरहclass User
def initialize(@name, age)
# @name is set implicitly, but @age isn't.
# the local variable "age" will be set, just like it currently works.
end
end
मैं इस सवाल के बारे में पता कर रहा हूँ: in Ruby can I automatically populate instance variables somehow in the initialize method?, लेकिन सभी समाधान (मेरे अपने सहित) गहरे लाल रंग का सादगी दर्शन फिट करने के लिए नहीं है।
और, क्या इस व्यवहार के लिए कोई डाउनसाइड्स होगा?
अद्यतन
इस के लिए कारणों में से एक सूखी (अपने आप को दोहराने नहीं है) माणिक समुदाय की विचारधारा है। मुझे अक्सर एक तर्क चर के नाम को दोहराने की आवश्यकता होती है क्योंकि मैं इसे उसी नाम के इंस्टेंस वैरिएबल को असाइन करना चाहता हूं।
def initialize(name)
# not DRY
@name = name
end
एक नकारात्मक पक्ष यह है कि मैं के बारे में सोच सकते हैं कि यह के रूप में यद्यपि एक विधि कुछ भी नहीं कर रही है, तो यह कोई शरीर है लग सकता है कि है। यदि आप जल्दी से स्कैन कर रहे हैं, तो यह नो-ऑप जैसा दिख सकता है। लेकिन मुझे लगता है कि समय दिया गया है, हम अनुकूलित कर सकते हैं।
एक और नकारात्मक पक्ष: यदि आप शरीर में अन्य आवृत्ति चर सेट कर रहे हैं, और आप शुरुआत में सभी असाइनमेंट डालकर पठनीय होने की कोशिश करते हैं, तो यह देखने के लिए और अधिक संज्ञानात्मक "शक्ति" ले सकती है कि वहां असाइनमेंट भी हो रहा है तर्क सूची। लेकिन मुझे नहीं लगता कि यह एक निरंतर या विधि कॉल देखने और इसकी परिभाषा पर कूदने के लिए कहने से कहीं अधिक कठिन है।
# notice: instance var assignments are happening in 2 places!
def initialize(@name)
@errors = []
end
इस उत्तर के लिए धन्यवाद। यह निश्चित रूप से अधिक काम की तरह लगता है कि यह लायक है। :) – hrdwdmrbl
@jackquack अच्छी तरह से, आपको वास्तव में केवल एक बार सेटअप करना होगा। फिर अपनी कक्षाओं में, आपको बस 'enable_for' और' slurp_args' कॉल करना है। – Kelvin