为了账号安全,请及时绑定邮箱和手机立即绑定

为什么编译器对功能签名要求如此严格的匹配?

为什么编译器对功能签名要求如此严格的匹配?

Go
小怪兽爱吃肉 2021-05-09 04:20:37
将函数分配给变量时,为什么编译器在以下情况下需要完美的函数签名匹配...变量的类型是一个函数,其参数或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
提交
取消
意见反馈 帮助中心 APP下载
官方微信