Привет всем, на моем курсе «Парадигмы программирования» мы только начали учиться программировать на Ruby. В одном упражнении предлагается реализовать функцию умножения двух матриц.
Используя обычную java, я попытался создать три двумерных массива, и вот как я пытаюсь реализовать это для двух матриц 2x2:
def matrixmultiplicator(first_matrix, second_matrix)
result_matrix = [][]
first_matrix.each_index do |i|
second_matrix[i].each_index do |j|
sum = 0
//This loop range is just a test for two 2x2 matrices
(0..1).each do |k|
sum = sum +(first_matrix[i][j+k] * second_matrix[j+k][i])
end
result_matrix[i][j] = sum
end
end
end
matrixmultiplicator([[1, 2], [3, 4]], [[2, 3], [3, 3]])
к сожалению, я получаю эту ошибку: неправильное количество аргументов (дано 0, ожидается 1..2) (ArgumentError)
Кто-нибудь может мне помочь? заранее спасибо
Это не делает того, что вы думаете:
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.new
.
Проверьте это: ruby-doc.org/stdlib-2.5.1/libdoc/matrix/rdoc/…