Создание массива Ruby, Array.new vs [] - PullRequest
31 голосов
/ 05 января 2011

В чем разница между этими двумя утверждениями?Я использую их в своем приложении rails, и мне кажется, что они делают то же самое

array_a = Array.new
array_b = []

Ответы [ 4 ]

65 голосов
/ 05 января 2011

Эти два утверждения функционально идентичны.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]

Примечание: приведенные выше примеры взяты из Программирование Ruby 1.9

9 голосов
/ 05 января 2011

[] - это ярлык к синглтон-методу класса Array [], который, в свою очередь, создает новый массив точно так же, как Array.new, так что вы, вероятно, можете сказать «они одинаковые», не беспокоясь .

Обратите внимание, что каждый вызов [] в irb создает новый массив:

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

Из код C Руби :

rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);
1 голос
/ 05 января 2011

Принципиально нет разницы

0 голосов
/ 26 июня 2019

Например Hash.new против {}.Они одинаковые.Включите скорость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...