7

不懂就问, go 不是没有运算符重载吗,为什么 map 可以通过下标访问,数组比较可以用=...

 2 years ago
source link: https://www.v2ex.com/t/818542
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  Go 编程语言

不懂就问, go 不是没有运算符重载吗,为什么 map 可以通过下标访问,数组比较可以用==

  jackiejkl · 2 小时 50 分钟前 · 598 次点击
m:=make(map[int]int)
m[0]=0 //map 可以通过下标访问元素
a:=[]int{1,2,3}
b:=[]int{1,2,3}
fmt.Print(a==b) //true
13 条回复    2021-11-28 19:55:21 +08:00

luguhu

luguhu   2 小时 44 分钟前 via iPhone

不懂就问,运算符重载和这两个有什么关系?为什么不可以这样用?

SuperMild

SuperMild   2 小时 39 分钟前

invalid operation: a == b (slice can only be compared to nil)

数组可以 ==,slice 不行。

jackiejkl

jackiejkl   2 小时 28 分钟前

@SuperMild 谢谢大佬 学到了 但是还是不明白数组可以==,按我的理解是两个不同数组的头指针在对比

jackiejkl

jackiejkl   2 小时 27 分钟前

@luguhu 因为按我的理解下标访问是数组才可以 数组==比较是两个不同数组的头指针在对比

Buges

Buges   2 小时 22 分钟前 via Android

“运算符重载”是很糟糕的命名,“重载”什么了?
正确的叫法应该是不允许为自定义类型定义运算符操作。
显然内置类型不属于自定义类型。

luguhu

luguhu   2 小时 16 分钟前

@jackiejkl go 的数组在做比较的时候对比的不是指针而是值吧. 可以尝试用 unsafe.Pointer 获取地址再对比, 获取到的两个地址应该是不一样的

neoblackcap

neoblackcap   2 小时 1 分钟前

运算符重载的例子你都举得不对,map 等内置数据结构当然可以用下标比较。因为这是语言规定的一部分。要举例子啊,你应该举 make ,毕竟它可以接受数量不一样的参数。你试试看能不能模仿

jackiejkl

jackiejkl   1 小时 54 分钟前

@neoblackcap 不明白这和 make 有什么关系 另外是因为我觉得除了 int 这种基本类型 map 应该是类 应该用 map.getValue(Key)来取得值 (似乎暴露了什么

yyf1234

yyf1234   1 小时 28 分钟前 via iPhone

map[key] = value,不明白和下标有什么关系

lysS

lysS   23 分钟前

你这是学叉了吧

map 那个你是访问的 key, 你把 map 的 key 定为 string 看看

ClarkAbe

ClarkAbe   13 分钟前

map 你不用这种方式的话你就只有 range 才能获取了........map 没有函数封装也不是 struct,为什么不能这样访问.......建议看完圣经.....

leoleoasd

leoleoasd   1 分钟前

有些语言,支持重载运算符,内置类型的运算自然通过重载运算符实现,比如 Python 和 Rust 。
有些语言不支持重载运算符,内置类型的运算符就只能通过语言规定。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK