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

如果映射包含一个带有键 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]


DIEA
浏览 82回答 1
1回答

jeck猫

作为语言本身的一部分,这是一个任意规则。它用于避免类型转换的恐慌:t, ok := x.(T)或者检查地图中是否确实存在键:v, ok := m[k]或者检查接收是否有效:x, ok := <-ch用你自己的函数是不可能做到的,只有在语言设计者插入的这些特殊情况下。
打开App,查看更多内容
随时随地看视频慕课网APP