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 回答