Использование Ruby 1.9.2 с RubyMine и Matrix - PullRequest
1 голос
/ 27 августа 2011

Я использую ruby ​​1.9.2-p290 и RubyMine.И я пытаюсь использовать матрицу (требуется «матрица»).Итак, у меня есть несколько вопросов.

  • Как мне изменить любое значение матрицы?

Например:

require 'matrix'
matrix =  Matrix[[1, -2, 3], [3, 4, -5], [2, 4, 1]]
matrix[0, 0] = 5
p matrix

Дает следующее:

in `<top (required)>': private method `[]=' called for Matrix[[1, -2, 3], [3, 4, -5], [2, 4, 1]]:Matrix (NoMethodError)
from -e:1:in `load'
from -e:1:in `<main>'
  • Можно ли показать мне методы для матрицы путем завершения кода в RubyMine IDE?
  • Какие библиотеки я должен использовать для матриц?Матрица?Mathn?Что-то другое?

Ответы [ 2 ]

2 голосов
/ 28 августа 2011

Объявление 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 был достаточно хорош.

0 голосов
/ 10 сентября 2011

Просто хотел дополнить ответ Михаила:

1) Библиотека Matrix разработана таким образом, что матрицы являются неизменяемыми, так же, как вы не можете установить действительную часть комплексного числа.

Я поддерживаю библиотеку (но не первоначальный автор). Я признаю, что, вероятно, было бы полезно, если бы они были изменчивыми. Уже слишком поздно менять его на Ruby 1.9.3, но я надеюсь проверить последствия его изменения.

3) Другая возможность - проверить библиотеку NArray.

...