将函数分配给变量时,为什么编译器在以下情况下需要完美的函数签名匹配...变量的类型是一个函数,其参数或return是特定的接口,并且分配的功能需要一个不同的接口,但是是一个嵌入了预期接口的接口。以这个例子为例...Fooer 是一个接口FooerBarer是嵌入Fooer接口的接口*bar 贯彻 FooerBarerhttp://play.golang.org/p/8NyTipiQak // Define a type that is a function that returns a Fooer interfacetype FMaker func() Fooer/* Define values of the FMaker type */ // This works, because the signature matches the FMaker typevar fmake FMaker = func() Fooer { return &bar{}} // This causes an error even though a FooerBarer is a Fooervar fmake2 FMaker = func() FooerBarer { return &bar{}}所以我的问题不是关于替代解决方案,而是为什么编译器是以这种方式构建的。似乎编译器将看到通过返回a FooerBarer,因此您将返回a Fooer,并且将接受赋值。所以...产生这种严格的编译器行为的原因是什么?解决了什么问题或避免了危险?为什么这与编译器FooerBarer在分配给Fooer变量的值时有什么不同?
1 回答
- 1 回答
- 0 关注
- 158 浏览
添加回答
举报
0/150
提交
取消