在Struct指针方法中操作矩阵数据成员

时间:2014-05-16 03:34:42

标签: pointers matrix struct go

我正在创建一个表示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。所以问题不是真的有效。

0 个答案:

没有答案