2011-01-05 10 views
25

これら2つのステートメントの違いは何ですか?私は私のレールのアプリでそれらを使用すると、彼らは同じことRuby配列の作成、Array.new対[]

array_a = Array.new 
array_b = [] 
+1

クリア/新しいオブジェクトを作成せずにアレイをリセットし、 'array.clear'を使用しますあなたの答えが私より優れているので、 '#=> []' –

答えて

56

これらの二つの文は機能的に同じです何の違いは基本的にありませんに見えます。 Array.newしかし引数とブロックを取ることができます:

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] 

注:Programming Ruby 1.9

+2

+1を達成するには: – sethvargo

+2

勝利のためにコピーして貼り付けてください! – zetetic

+2

同じオブジェクトの配列を生成する 'Array.new(count、object)'は、このアプローチを使わないことを意味するものです。 –

9

[]から取られた上記の例を順番にちょうど同じで新しい配列を作成し、Arrayクラスのシングルトンメソッド[]へのショートカットです方法はArray.newだから、あまりにも心配することなく、「彼らは同じだ」と言えるかもしれません。 Ruby's C codeから

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

:IRBで[]への各呼び出しは、新しいアレイを作成すること

rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1); 
関連する問題