2 回答

TA貢獻1847條經(jīng)驗 獲得超7個贊
這段代碼中有幾個問題,但第一個,也是你指出的那個,是函數(shù)NewPath
在這里定義了兩次,Go 會因此拋出錯誤。Go 不支持方法重載,因此解決此問題的最簡單方法是將第二個函數(shù)重命名為其他名稱。
您將遇到的下一個錯誤是,它發(fā)生在第二個函數(shù)的cannot use op.path (type []Cell) as type Cell in append
行中。發(fā)生這種情況是因為您試圖將(type )放入(type ),因此由于不是類型,因此無法附加到. 請注意,這與連接不同,相反,它采用從第二個開始的所有參數(shù)并將它們放在第一個參數(shù)中。要解決此問題,您可以使用運算符解壓。這將使 的每個參數(shù)成為一個單獨的參數(shù),并且每個元素都將被放置在 中。p.path = append(p.path, op.path)
NewPath
op.path
[]Cell
p.path
[]Cell
op.path
Cell
p.path
append
op.path
append
...
op.path
append
p.path
這是您的代碼的重構(gòu)版本:
func NewPath() (p *Path) { // no changes
p = new(Path)
p.path = []Cell{}
p.count = 0
p.name = "P" + strconv.Itoa(1+p.count)
return
}
func NewPathFromOriginal(op Path) (p *Path) { // renamed
p = new(Path)
p.path = []Cell{}
p.count = 0
p.name = op.name
p.path = append(p.path, op.path...) // note the '...'
return
}
- 2 回答
- 0 關(guān)注
- 167 瀏覽
添加回答
舉報