4

我是红宝石的新手,但这是问题所在。假设我有一个矩阵,我需要在 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,但没有找到任何答案,抱歉问了这么愚蠢的问题......

4

1 回答 1

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)
于 2013-04-08T16:45:55.493 回答