我正在使用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>'
答案 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
库。