2010-07-19 13 views
5

क्या यह मामला होना चाहिए यानी मैं गलतफहमी कर रहा हूं, या यह एक बग है?क्या यह रूबी में Array.fill विधि में एक बग है?

a = Array.new(3, Array.new(3)) 
a[1].fill('g') 

=> [["g", "g", "g"], ["g", "g", "g"], ["g", "g", "g"]] 

यह परिणाम नहीं में करना चाहिए:

=> [[nil, nil, nil], ["g", "g", "g"], [nil, nil, nil]] 

उत्तर

9

Array.new(3, Array.new(3)) एक सरणी है जो एक ही सरणी तीन बार शामिल रिटर्न (दूसरे शब्दों में: अभिव्यक्ति Array.new(3) ठीक एक बार मूल्यांकन किया जाता है और कोई प्रतियां बना रहे हैं)।

आप जो चाहते हैं वह Array.new(3) { Array.new(3) } है, जो Array.new(3) का मूल्यांकन तीन बार करता है और इस प्रकार आपको तीन स्वतंत्र सरणी का सरणी देता है।

+0

बढ़िया है, धन्यवाद देता! –

0

यह सही है, Array.new(array) (समान obj है कि है, आकार संदर्भ) obj के आकार प्रतियों के साथ बनाई गई एक नई सरणी

संबंधित मुद्दे