我是红宝石的新手,但这是问题所在。假设我有一个矩阵,我需要在1,2
修改一个元素mm = Matrix.build(2,4) {0}
mm[1][2] = 404
但这会出现错误消息
ArgumentError: wrong number of arguments (1 for 2)
from /Users/xxxxxx/.rvm/rubies/ruby-2.0.0-p0/lib/ruby/2.0.0/matrix.rb:314:in `[]'
from (irb):11
from /Users/xxxxxx/.rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>'
我检查了ruby doc,但没有找到任何答案,抱歉问这么愚蠢的问题...
答案 0 :(得分:9)
获取元素:
mm[1,2] #output 0
设置元素:
没有方法可以做到这一点。 Matrix是不可变对象,无法更改(即恕我直言,不是那么优化)。您可以将each
的矩阵复制到数组,更改元素,然后转换回来,或者使用猴子补丁
class Matrix
def []=(i, j, x)
@rows[i][j] = x
end
end
mm[1,2] = 404
或者,如果你不想修补或想要有点hacky(虽然看起来不太好):
mm.send(:[]=, 1, 2, 404)