我理解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方法强奸班级?
答案 0 :(得分:11)
为什么要打开该类来重新定义已存在的方法?
class Matrix
public :"[]=", :set_element, :set_component
end
答案 1 :(得分:4)
您可以打开课程并使用自己的方法来执行此操作:
class Matrix
def []=(i, j, x)
@rows[i][j] = x
end
end