2011-01-05 5 views
25

¿Cuál es la diferencia entre estas dos instrucciones? Yo los uso en mi aplicación rieles y me parece que hacen lo mismoCreación de matriz de rubíes, Array.new vs []

array_a = Array.new 
array_b = [] 
+1

Para borrar/matriz de reposición sin crear un nuevo objeto, utilice 'array.clear' para lograr '# => []' –

Respuesta

56

Esas dos afirmaciones son funcionalmente idénticos. Array.new sin embargo, puede tomar argumentos y un bloque:

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] 

Nota: los ejemplos anteriores tomadas de Programming Ruby 1.9

+2

+1 porque su respuesta es mejor que la mía :) – sethvargo

+2

¡copie y pegue para ganar! – zetetic

+2

'Array.new (count, object)' producir una matriz del mismo objeto es un gotcha que significa que evito usar ese enfoque. –

0

hay ninguna diferencia fundamental

9

[] es un acceso directo al método singleton de la clase Array [] que a su vez crea una nueva matriz en la misma como Array.new, por lo que probablemente podría decir "son lo mismo" sin preocuparse demasiado.

Tenga en cuenta que cada llamada a [] en IRB crea una nueva matriz:

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

De Ruby's C code:

rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1); 
Cuestiones relacionadas