Это не делает то, что вы думаете:
result_matrix = [][]
Он пытается вызвать «метод индексации массива» ([]
) для пустого массива, но не передает никаких аргументов методу []
. Операторы - это просто методы с некоторым синтаксическим сахаром в Ruby, поэтому [][]
примерно эквивалентно:
empty_array = []
empty_array.[]()
где .[]
- это вызов метода []
(точно так же, как obj.m
- это вызов метода m
), а ()
- пустой список аргументов.
Ruby (как и большинство языков) не имеет многомерных массивов, он имеет массивы массивов, поэтому вы можете создавать внутренние массивы в первый раз, когда они вам понадобятся:
result_matrix = [ ]
#...
result_matrix[i] ||= [ ]
result_matrix[i][j] = sum
вместо
result_matrix[i][j] = sum
Или вы можете предварительно заполнить result_matrix
:
result_matrix = Array.new(2) { [ ] }
См. Документацию Array для конструктора , чтобы узнать, что происходит с этим Array.new
вызовом.