2011-01-05 7 views
25

इन दो बयानों के बीच क्या अंतर है? मैं उन्हें अपने रेल app में इस्तेमाल करते हैं और मेरे लिए यह है कि वे एक ही बातरूबी सरणी निर्माण, Array.new बनाम []

array_a = Array.new 
array_b = [] 
+1

एक नई वस्तु बनाने के बिना/रीसेट सरणी साफ़ करने के लिए, का उपयोग 'array.clear' '# => []' –

उत्तर

56

उन दो बयानों कार्यात्मक रूप से समान हैं लग रहा है।

Array.new # => [] 
Array.new(2) # => [nil,nil] 
Array.new(5,"A") # =>["A","A","A","A","A"] 

a = Array.new(2,Hash.new) 
a[0]['cat'] = 'feline' 
a # => [{"cat"=>"feline"},{"cat"=>"feline"}] 
a[1]['cat'] = 'Felix' 
a # => [{"cat"=>"Felix"},{"cat"=>"Felix"}] 

a = Array.new(2){Hash.new} # Multiple instances 
a[0]['cat'] = 'feline' 
a # =>[{"cat"=>"feline"},{}] 
squares = Array.new(5){|i|i*i} 
squares # => [0,1,4,9,16] 

copy = Array.new(squares) # initialized by copying 
squares[5] = 25 
squares # => [0,1,4,9,16,25] 
copy # => [0,1,4,9,16] 

नोट:: Array.new लेकिन तर्क और एक ब्लॉक ले जा सकते हैं उपरोक्त उदाहरण Programming Ruby 1.9

+2

+1 प्राप्त करने के लिए क्योंकि आपका उत्तर मेरा से बेहतर है :) – sethvargo

+2

जीत के लिए कॉपी और पेस्ट करें! – zetetic

+2

'Array.new (गिनती, ऑब्जेक्ट) 'एक ही वस्तु की एक सरणी का उत्पादन एक गॉचा है जिसका अर्थ है कि मैं उस दृष्टिकोण का उपयोग करने से बचता हूं। –

9

[] से लिया सरणी वर्ग के सिंगलटन विधि [] के लिए एक शॉर्टकट है जो बदले में सिर्फ एक ही में एक नई सरणी बनाता है Array.new के रूप में, तो आप शायद बहुत अधिक चिंता किए बिना 'वे वही हैं' कह सकते हैं।

ध्यान दें कि आईआरबी में [] की प्रत्येक कॉल एक नई सरणी बनाता है:

>> [].object_id 
=> 2148067340 
>> [].object_id 
=> 2149414040 

Ruby's C code से:

rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1); 
संबंधित मुद्दे