मैं रूबी की मूल बातें सीख रहा हूं (बस शुरू करना), और मैं Hash.[]
method पर आया। यह थोड़ा सोचा के साथरूबी सिंटेक्टिक चीनी के लिए "नियम" हैं?
a = ["foo", 1, "bar", 2]
=> ["foo", 1, "bar", 2]
Hash[*a]
=> {"foo"=>1, "bar"=>2}
साथ पेश किया गया था, मैं पता लगा कि Hash[*a]
Hash.[](*a)
या Hash.[] *a
के बराबर है। मेरा सवाल यह है कि ऐसा क्यों है। यह क्या है जो आपको स्क्वायर ब्रैकेट के अंदर *a
डालने देता है, और क्या वहां और कब "इसे" इस्तेमाल किया जा सकता है, इसके लिए कोई नियम है?
संपादित करें: मेरा शब्द कुछ भ्रम पैदा कर रहा है। मैं सरणी विस्तार के बारे में नहीं पूछ रहा हूँ। मै समझ गया। मेरा सवाल मूल रूप से है: यदि []
एक विधि का नाम है, तो ब्रैकेट के अंदर तर्क डालना ठीक क्यों है? ऐसा लगता है कि लगभग - लेकिन काफी नहीं - जैसे कि आपके पास Foo.dood
विधि है, और आप इसे "hey"
स्ट्रिंग पास करना चाहते हैं, तो आप Foo.do"hey"od
लिख सकते हैं।
मुझे एक विधि आमंत्रण में '* ए' पर ध्यान केंद्रित करने वाले बहुत सारे उत्तर दिखाई देते हैं। हालांकि, अन्य प्रोडक्शंस को संबोधित करना अच्छा लगेगा, जैसे कि '[1, * ए]' काम करता है "अपेक्षित" (जो '[1, ए]' से भिन्न परिणाम उत्पन्न करता है और क्यों '[* ए, 1] 'अमान्य है। यह देखना भी अच्छा होगा कि कैसे "विभाजन" असाइनमेंट से संबंधित है और यह रूबी के असाइनमेंट-अपघटन के साथ कैसे बातचीत कर सकता है ... शायद तर्कसंगत रूप से एक अलग SO प्रश्न पूरी तरह से ;-) यह वास्तव में अच्छा होगा * अगर वहां था अर्ध औपचारिक रूबी विनिर्देश। अर्ध-विनिर्देशों के लिंक उत्तर बेहतर बनाएंगे। –
@pst: अच्छे प्रश्न। यदि आप इसके बारे में एक नया SO सवाल पूछते हैं, तो यहां लिंक पोस्ट करें ताकि मैं इसका अनुसरण कर सकूं। –
ध्यान दें कि इसका उपयोग करने का सामान्य तरीका जोड़ों की एक सरणी भेजना है: हैश [[[key1, value1], [key2, value2]]] – tokland