有人可以解释为什么当切片传递给可变参数函数时鸭子类型不起作用。如下所示的情况 1 和 2 似乎有效,但下面的情况 3 初始化一个切片,然后将取消引用的切片传递给接受接口的函数。错误信息是: cannot use gophers (type []Gopher) as type []Animal in argument to runForestpackage main import ( "fmt" ) type Animal interface { Run() string } type Gopher struct { } func (g Gopher) Run() string { return "Waddle.. Waddle" } func runForest(animals ...Animal) { for _, animal := range animals { fmt.Println(animal.Run()) } } func main() { //works runForest(Gopher{}) //works runForest(Gopher{},Gopher{}) // does not work gophers := []Gopher{{},{}} runForest(gophers...) }
1 回答
喵喵时光机
TA贡献1846条经验 获得超7个赞
切片不能像它们的元素那样隐式转换。一个Gopher可以像一个一样嘎嘎叫Animal,但一个[]Gopher不能像一个一样嘎嘎叫[]Animal。
使其工作的最小变化是:
func main() {
gophers := []Gopher{{}, {}}
out := make([]Animal, len(gophers))
for i, val := range gophers {
out[i] = Animal(val)
}
runForest(out...)
}
- 1 回答
- 0 关注
- 161 浏览
添加回答
举报
0/150
提交
取消