如何修改矩阵(Ruby std-lib Matrix类)?

时间:2012-10-02 02:27:29

标签: ruby matrix

我理解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方法强奸班级?

2 个答案:

答案 0 :(得分:11)

为什么要打开该类来重新定义已存在的方法?

class Matrix
  public :"[]=", :set_element, :set_component
end

答案 1 :(得分:4)

您可以打开课程并使用自己的方法来执行此操作:

class Matrix
  def []=(i, j, x)
    @rows[i][j] = x
  end
end