将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
库。