2 回答
TA贡献1847条经验 获得超7个赞
这段代码中有几个问题,但第一个,也是你指出的那个,是函数NewPath
在这里定义了两次,Go 会因此抛出错误。Go 不支持方法重载,因此解决此问题的最简单方法是将第二个函数重命名为其他名称。
您将遇到的下一个错误是,它发生在第二个函数的cannot use op.path (type []Cell) as type Cell in append
行中。发生这种情况是因为您试图将(type )放入(type ),因此由于不是类型,因此无法附加到. 请注意,这与连接不同,相反,它采用从第二个开始的所有参数并将它们放在第一个参数中。要解决此问题,您可以使用运算符解压。这将使 的每个参数成为一个单独的参数,并且每个元素都将被放置在 中。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
这是您的代码的重构版本:
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 关注
- 135 浏览
添加回答
举报