Объявление 1) Я знаю, что в документации сказано, что []=
- это метод публичного экземпляра, реальность в 1.9.2, похоже, не соответствует этому:
matrix.private_methods.grep(/\[\]/) #=> [:[]=]
Я вижу два пути решения этой проблемы. Первый использует send
для обхода private
:
matrix.send(:[]=, 0, 0, 5) #=> 5
Второй проходит через массив:
m = *matrix
m[0][0] = 5
matrix = Matrix[*m]
Если вы действительно хотите, вы можете изменить видимость метода:
matrix.class.class_eval { public :[]= }
Обратите внимание, что я не поощряю ничего из этого, способ реализации класса является сильным намеком на то, что авторы считают матрицы неизменными объектами.
Объявление 2) К сожалению, я не знаю RubyMine, но документацию для класса Matrix
можно найти здесь .
Объявление 3) У меня еще не было широкого использования матриц в Ruby, но для того, что мне было нужно, класс Matrix
был достаточно хорош.