我正在创建一个表示Matrix的结构,其中包含操作类型中数据的方法。我使用两种方法将单个行或列设置为特定值。以下是我的代码片段:
type Matrix struct {
Height, Width int
data [][]int
}
func NewMatrix(nrows, ncols int) (mat *Matrix) {
mat = new(Matrix)
mat.Height = nrows
mat.Width = ncols
mat.data = make([][]int, nrows)
for i := range mat.data {
mat.data[i] = make([]int, ncols)
for j := range mat.data[i]{
mat.data[i][j] = 0
}
}
return
}
func (mat *Matrix) SetCol(col, val int) {
for i := 0; i < mat.Height; i++ {
mat.data[i][col] = val
}
}
func (mat *Matrix) SetRow(row, val int) {
for i := 0; i < mat.Width; i++ {
mat.data[row][i] = val
}
}
当我使用此Matrix
类型并操纵data
属性时,如下所示:
mat := NewMatrix(33,33)
mat.SetCol(2, 3)
mat.SetRow(2, 3)
我发现data
实例的Matrix
属性是在方法SetCol
中设置的,但一旦从此方法返回,data
似乎是我初始化它的空矩阵。
为什么我在方法中操作的data
属性不会持续超过方法调用的生命周期?我该如何解决这个问题?
修改
我发现问题是我在循环中的每次迭代中实例化Matrix
的新实例,这就是为什么在用SetCol
操纵矩阵后矩阵总是显得空的原因和SetRow
。所以问题不是真的有效。