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 は不変のオブジェクトであり、変更することはできません (つまり、IMHO は最適ではありません)。行列eachを配列にコピーし、要素を変更して元に戻すか、モンキーパッチを使用できます

class Matrix
  def []=(i, j, x)
    @rows[i][j] = x
  end
end
mm[1,2] = 404

または、モンキー パッチを適用したくない場合、または少しハックしたい場合 (見栄えはよくありませんが):

mm.send(:[]=, 1, 2, 404)
于 2013-04-08T16:45:55.493 に答える