Какая разница между этими двумя утверждениями? Я использую их в приложении rails, и для меня это похоже на то, что они делают то же самое.
array_a = Array.new
array_b = []
Какая разница между этими двумя утверждениями? Я использую их в приложении rails, и для меня это похоже на то, что они делают то же самое.
array_a = Array.new
array_b = []
Эти два утверждения функционально идентичны. 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
[]
является ярлыком для метода Singleton класса Array []
, который, в свою очередь, создает новый массив точно так же, как Array.new
, поэтому вы, вероятно, можете сказать "они одинаковы", не беспокоясь слишком много.
Обратите внимание, что каждый вызов []
в irb создает новый массив:
>> [].object_id
=> 2148067340
>> [].object_id
=> 2149414040
От Код Ruby C:
rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1);
В принципе нет разницы
Например, Hash.new
vs {}
. Они одинаковые. Включите скорость.
Как другие уже ответили вам
Эти два утверждения функционально идентичны
Но есть рекомендации, чтобы ориентироваться, когда вы должны использовать каждый из них (чтобы ваш код было легче читать). Причина этого заключается в следующем:
Программы должны быть написаны для того, чтобы люди могли их читать, и только для машин - для выполнения.
из: https://github.com/rubocop-hq/ruby-style-guide#literal-array-hash
Предпочитайте литеральные массивы и нотации создания хэшей (если вам не нужно передавать параметры их конструкторам, то есть).
Поэтому, если вы создаете пустой массив, то []
- лучший вариант, но если вам нужно создать свой массив с набором из N nil объектов, вам следует написать Array.new(N)
.