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

Go 中的索引表达式是否根据上下文更改其返回类型?

Go 中的索引表达式是否根据上下文更改其返回类型?

Go
DIEA 2023-03-29 17:28:31
如果映射包含一个带有键 x 的条目,则 a[x] 是带有键 x 的映射元素,并且 a[x] 的类型是 M 的元素类型但map[K]V 类型的映射 a 上的索引表达式,用于特殊形式的赋值或初始化v, ok := a[x]产生一个额外的无类型布尔值。我还在学习围棋。它是融入语言的“语法特征”并且“仅在使用此语法时起作用”,即调用v := a[x]并v, ok := a[x]表示为 AST 中不同类型的节点,如MapGetAndCheckExistsNode(m, k, v, ok)vs MapGet(m, k, v)?或者这是使用“正常”的 Go 语法实现的,索引函数以某种方式知道它的输出是否稍后被“解构”?是否可以使用语法强制索引表达式返回元组或结构s.v以及s.ok字段s := a[x]?
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

作为语言本身的一部分,这是一个任意规则。它用于避免类型转换的恐慌:

t, ok := x.(T)

或者检查地图中是否确实存在键:

v, ok := m[k]

或者检查接收是否有效:

x, ok := <-ch

用你自己的函数是不可能做到的,只有在语言设计者插入的这些特殊情况下。

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

添加回答

举报

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