将Ruby 1.9.2与RubyMine和Matrix结合使用

时间:2011-08-27 11:54:29

标签: ruby matrix ruby-1.9.2 rubymine

我正在使用ruby 1.9.2-p290和RubyMine。我尝试使用Matrix(需要'矩阵')。所以,我几乎没有问题。

  • 如何更改矩阵的任何值?

例如:

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 个答案:

答案 0 :(得分:2)

广告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类的文档here

Ad 3)我还没有广泛使用Ruby中的矩阵,但是对于我需要它们,Matrix类已经足够了。

答案 1 :(得分:0)

只是想补充迈克尔的答案:

1)Matrix库的设计使得矩阵是不可变的,就像你不能设置复数的实部一样。

我是图书馆的维护者(但不是原作者)。我承认如果它们是可变的可能会有用。为Ruby 1.9.3更改它为时已晚,但我希望检查使它们变得可变的后果。

3)另一种可能性是检查NArray库。