arr3
Поскольку содержит два идентичных объекта, но arr4
содержит два различных объектов.
>> arr3 = Array.new(2, Array.new(2, 0))
=> [[0, 0], [0, 0]]
>> arr3.map { |ary| ary.object_id }
=> [73703490, 73703490]
>> arr4 = [[0, 0], [0, 0]]
=> [[0, 0], [0, 0]]
>> arr4.map { |ary| ary.object_id }
=> [73670930, 73670920]
>>
Read new(size=0, default=nil)
... В первой форме, если аргументы не передаются, новый массив будет пустым. При отправке размера и факультативного значения по умолчанию создается массив с размерами по умолчанию. Обратите внимание, что все элементы будут ссылаться на один и тот же объект по умолчанию.
arr3
Вы создали, используя форму выше, при создании arr4
с использованием буквального конструктора []
.
Новый массив может быть создан using the literal constructor []
. Массивы могут содержать различные типы объектов.
Если вы хотите Array::new
вести себя как буквальное конструкцию, а затем перейти с new(size) {|index| block }
форме.
>> arr3 = Array.new(2){ Array.new(2, 0) }
=> [[0, 0], [0, 0]]
>> arr3.map { |ary| ary.object_id }
=> [73551460, 73551450]
>>
@sawa Я закончил .. Исправления приветствуются от вас .. :) –