8

Ruby stdlib Matrix は変更できない、つまり、たとえば.

m = Matrix.zero( 3, 4 )

書くことはできません

m[0, 1] = 7

でもすごくやりたい…

def modify_value_in_a_matrix( matrix, row, col, newval )
  ary = (0...m.row_size).map{ |i| m.row i }.map( &:to_a )
  ary[row][col] = newval
  Matrix[ *ary ]
end

...または次のような不正行為を伴う

Matrix.send :[]=, 0, 1, 7

、しかし、これは人々が常に遭遇する問題でなければならないのだろうか. #send メソッドを使用してクラスを強姦することなく、これを行う標準的で慣習的な方法はありますか?

4

2 に答える 2

11

すでに存在するメソッドを再定義するためにクラスを開くのはなぜですか?

class Matrix
  public :"[]=", :set_element, :set_component
end
于 2014-02-04T17:35:20.427 に答える
4

これを行うには、クラスを開いて独自のメソッドを定義できます。

class Matrix
  def []=(i, j, x)
    @rows[i][j] = x
  end
end
于 2012-10-02T02:42:13.977 に答える