2013-01-19 8 views
6

मैं तीन नए सरणियों (a1, a2, a3) घोषित करने के लिए चाहते हैं, तो मैं यह कर सकता:असाइन एक के बाद एक बयान में कई वस्तुओं के लिए मूल्य

a1=[] 
a2=[] 
a3=[] 

लेकिन अब मैं एक पर यह सब करना चाहते हैं लाइन,

a1, a2, a3 = [] 

लेकिन यह विफल हो जाता है। मैं उन्हें एक पंक्ति पर खाली सरणी में कैसे आवंटित कर सकता हूं?

उत्तर

18

अपने दूसरे उदाहरण की तरह कुछ करने के लिए, आप अभी भी तीन सरणियों बनाने के लिए की आवश्यकता होगी: यदि आप दोहरा [] शाब्दिक नहीं करने का आग्रह करते

a1, a2, a3 = [], [], [] 
+5

तो वस्तु निर्धारित किये जाने से अपरिवर्तनीय हुआ (जैसे, कहते हैं, '42'), तो यह" सरल "हो सकता है' a1 के लिए, A2, A3 = [42] * 3'। –

+5

मुझे लगता है कि यह भी आसान होगा: 'a1 = a2 = a3 = 42' – pguardiario

+0

यह एक शर्म की बात है। और बग के लिए कमरे छोड़ देता है। ए = बी = [] बी को खाली सरणी असाइन करेगा लेकिन एक इच्छा सिर्फ बी का संदर्भ होगा, जो आप नहीं चाहते हैं। ए, बी = [] ए और बी दोनों को शून्य सौंपेगा, क्योंकि सरणी खाली है और यह पैरारल असाइनमेंट करता है। तो जैसा कि आप देख सकते हैं, वास्तव में कोई अन्य तरीका नहीं है, बी = [], [], जो एक शर्म की बात है।डोनाटो – Donato

5

, तो एक ही रास्ता है:

a1, a2, a3 = Array.new(3){[]} 

एक और तरीका है:

a1 = (a2 = (a3 = []).dup).dup 
+0

मुझे लगता है कि यह ब्लॉक आमंत्रण की वजह से ए, बी = [], [] की तुलना में अतिरिक्त प्रदर्शन हिट ले सकता है। लेकिन यह सिर्फ मेरा अनुमान है। – Donato

3

रूबी एकाधिक असाइनमेंट नीचे रों में अप्रत्याशित है ituations:

a1, a2, a3 = [] 

ऊपर कोड किसी भी सरणी चर में खाली सरणी निर्दिष्ट नहीं करेगा।

उपयोग करते हैं,

a1, a2, a3 = [], [], [] 

आप मानों की संख्या प्रदान करने के लिए के रूप में चर की संख्या प्रारंभ करने में उपयोग किया जाता है की जरूरत है।

0

आप निम्न कर सकते हैं:

a1=[]; a2=[]; a3=[] 
+3

इस तरह कोड की हजार लाइन एक लाइनर में लिखा जा सकता है ...;) –

0

निम्नलिखित स्निपेट सभी गहरे लाल रंग का VMs पर एक ही तरह से व्यवहार करेंगे?

a,b = b,nil 

इस लाइनर का बिंदु 'ए' को 'बी' से मूल्य में सेट करना और 'बी' रीसेट करना है।

4

As Andrew Marshall pointed out, का एक और छोटा तरीका भी कई ऑब्जेक्ट्स पर एक मान निर्दिष्ट करता है।

a1, a2, a3 = [42] * 3 
2

ये जवाब ओवर-इंजीनियर, ओपी के नमूने में Array के भ्रामक उपयोग पर ध्यान केंद्रित कर रहे हैं।

a1 = a2 = a3 = [] 
# => [] 

टेस्ट परिणाम

a1 
# => [] 
a2 
# => [] 
a3 
# => [] 
a4 # for sake of comparison 
NameError: undefined local variable or method `a4' for main:Object 
संबंधित मुद्दे