Jaka jest różnica między tymi dwoma stwierdzeniami? Używam ich w moim app szyn i dla mnie to wygląda jak robią to samoTworzenie macierzy Ruby, Array.new kontra []
array_a = Array.new
array_b = []
Jaka jest różnica między tymi dwoma stwierdzeniami? Używam ich w moim app szyn i dla mnie to wygląda jak robią to samoTworzenie macierzy Ruby, Array.new kontra []
array_a = Array.new
array_b = []
Te dwa stwierdzenia są funkcjonalnie identyczne. Array.new
jednak można wziąć argumenty i blok:
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]
Uwaga: Powyższe przykłady zaczerpnięte z Programming Ruby 1.9
Jest zasadniczo nie ma różnicy
[]
jest skrótem do metody singleton klasy Array []
co z kolei tworzy nową tablicę w taki sam sposób jako Array.new
, więc możesz powiedzieć "są tacy sami", nie martwiąc się zbytnio.
Należy pamiętać, że każde wywołanie []
w IRB tworzy nową tablicę:
>> [].object_id
=> 2148067340
>> [].object_id
=> 2149414040
Od Ruby's C code:
rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);
aby usunąć/reset tablicę bez tworzenia nowego obiektu, użyj 'array.clear' aby osiągnąć '# => []' –