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

传递具有精确约束的类型参数以使用该参数运行?

传递具有精确约束的类型参数以使用该参数运行?

Go
qq_花开花谢_0 2023-03-21 10:31:42
我开始使用 Go 泛型并且很难理解为什么这段代码无法编译:func f(string) {}func xyz[T string](p T) {    f(p) // Error! Cannot use 'p' (type T) as the type string}在 function 中xyz,为什么不能假定 T 上存在类型约束,使得 T 是字符串类型?我知道我可以简单地写f(string(p)),但我仍然对问题的答案感兴趣。
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

这是因为assignability规则,在您的特定情况下,这是最后一条规则。

V 是类型参数,T 不是命名类型,并且 V 的类型集中的每个类型的值都可以分配给 T。

Typestring命名类型,因此,即使 的T类型集中的每个类型都可分配给string,类型参数T本身也不可分配给string

您可以将其与未命名类型进行比较。

func f([]string) {}


func xyz[T []string](p T) {

    f(p) // no issue

}


查看完整回答
反对 回复 2023-03-21
  • 1 回答
  • 0 关注
  • 79 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信