我尝试为我自己的类型实现一个初始化方法。然而,在调用该方法后,变量在 main() 中没有改变。我可能还没有完全理解切片是如何工作的,这是我的示例代码
package main
import "fmt"
type test [][]float64
func (p *test) init(m, n int){
tmp := *p
tmp = make(test, m)
for i := 0; i < m; i++ {
tmp[i] = make([]float64, n)
}
}
func main(){
var t test
t.init(10,2)
fmt.Println(t)
}
我的印象是接收器类型 * 的内容可以更改,但切片似乎并非如此。那么如何正确地将我的初始化函数绑定到我的类型呢?我很确定我这边有误解....我尝试了几种方法,例如
var t *test = new(test)
或者
func (p *test) init(m, n int){
tmp := *p
tmp = append(tmp, make(test, m)...)
for i := 0; i < m; i++ {
tmp[i] = append(tmp[i], make([]float64, n)...)
}
}
等等,但都失败了..
我目前知道的唯一可行的解决方案是一个未绑定的方法,它将指针返回到一个新的切片。现在可以这样做,但我想将此作为界面中的先决条件。那么我该如何绑定呢?