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

Golang 多重返回重载是地图类型独有的吗?

Golang 多重返回重载是地图类型独有的吗?

Go
Qyouu 2021-09-27 10:01:26
这些都有效:m := make(map[int]int)elem, ok := m[1]elem = m[1]然而,这是不允许的:func overload() (int, int) {    return 1, 1}func overload() int {    return 1}func main() {    x := overload()    x, y := overload()}另外,是否有不能概括的内置语法列表?我一直对什么是特殊语法(即map[string]int)make([]int, 10)以及什么是语言的一部分感到困惑。
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

这是特殊的语法。除了映射键检查之外,至少类型断言和通道接收具有一元素和二元素版本。在所有这些情况下,第二个元素在文档示例中是一个bool调用ok;对于类型断言,它表示断言是否成功,对于通道接收,它表示通信是否成功(false如果通道关闭且为空)。

for...range有自己的、不同的单元素和双元素版本,但也许range更明显是特别的。

有一个内置函数列表。如果你真的想知道所有的极端情况,请查看规范——它很短,没有陷入某些标准文档的各种细节,一旦你玩过这种语言就值得花时间. (Effective Go和FAQ也属于这一类。)


查看完整回答
反对 回复 2021-09-27
?
白板的微信

TA贡献1883条经验 获得超3个赞

您给出的示例不是方法重载。


第一个示例:显示地图中是否存在键。


m := make(map[int]int)

elem, ok := m[1]

elem = m[1]

elem 将从地图中接收值“1”或“零值”,如果“foo”实际存在于地图中,则 ok 将接收一个将设置为 true 的布尔值。


官方网站:Go 不支持方法和运算符的重载?


如果不需要进行类型匹配,则方法分派会得到简化。使用其他语言的经验告诉我们,拥有多种名称相同但签名不同的方法有时很有用,但在实践中也可能会令人困惑和脆弱。仅按名称匹配并要求类型的一致性是 Go 类型系统中一个主要的简化决定。


Golang 支持可变参数函数和方法。这是您可以(或多或少)在 Golang 中进行函数和方法重载的另一种方式。


可变参数函数或方法是接受可变数量参数的函数或方法。


示例:


o1 := Overload(1, 2, 3)

o2 := Overload(153, 196883, 1729, 1634, 5, 36)

o3 := Overload(1, -2)

有关更多详细信息,您可以查看这篇文章:Golang 中的函数和方法重载。


查看完整回答
反对 回复 2021-09-27
  • 3 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

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