将Ruby 1.9.2与RubyMine和Matrix结合使用

我使用的是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 `': 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 `' 
  • 是否有可能通过RubyMine IDE中的代码完成向我展示矩阵的方法?
  • 我应该为矩阵使用哪些库? 矩阵? Mathn? 别的什么?

广告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 :[]= } 

请注意,我不鼓励任何这些,实现类的方式强烈暗示作者认为矩阵是不可变对象。

Ad 2)遗憾的是我不知道RubyMine,但可以在这里找到Matrix类的文档。

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

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

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

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

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

Interesting Posts