我嘗試爲我自己的類型實現初始化方法。然而,在調用該方法後,該變量在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)...)
}
}
等但都失敗了..
的我目前知道的唯一工作解決方案是一個未綁定的方法,該方法將指針返回到新切片。這會做現在,但我想使這個接口的先決條件。那我該如何綁定它?
分配一件事'tmp',然後在下一行指派另一件事是愚蠢的;它只是丟棄第一個值 – newacct 2012-04-06 00:08:35
請在界面中說明您的最後一點。什麼接口? – alphazero 2012-04-06 03:29:47