Есть ли какая-то конкретная причина, по которой вы хотели бы написать свой собственный класс массива? По умолчанию вы можете указать массиву, чем заполнять новые элементы, указав второй аргумент:
>> a = Array.new(10, [])
=> [[], [], [], [], [], [], [], [], [], []]
Редактировать: По-видимому, таким образом он заполняет массивы ссылками на переданный объект, поэтому после выполнения a[0][0] = "asd"
каждый первый элемент содержащихся массивов изменится. Не круто.
>> a[0][0] = "asd"
=> "asd"
>> a
=> [["asd"], ["asd"], ["asd"], ["asd"], ["asd"], ["asd"], ["asd"], ["asd"], ["asd"], ["asd"]]
Чтобы каждый содержащийся массив был уникальным, используйте третий синтаксис и дайте ему блок для выполнения каждый раз - результат блока будет использоваться для заполнения массива:
>> b = Array.new(10) { [] }
=> [[], [], [], [], [], [], [], [], [], []]
>> b[0][0] = "asd"
=> "asd"
>> b
=> [["asd"], [], [], [], [], [], [], [], [], []]
Кроме того, из-за того, как работают массивы ruby, определение размера оси y даже не требуется:
>> a = Array.new(5)
=> [nil, nil, nil, nil, nil]
>> a[10]
=> nil
>> a[10] = "asd"
=> "asd"
>> a
=> [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, "asd"]
Массив автоматически расширяется, когда вы помещаете в индекс нечто большее, чем текущий размер. Итак, просто создайте массив, содержащий десять пустых массивов, и у вас будет готов массив для использования размером 10 * n.