在Python中,我可以通过定义来定义覆盖列表项访问和字典值访问的类型__getitem__()
。我可以在 Go 中做类似的事情吗?
// What I mean is:
type MySlice []MyItem
// Definition of MySlice
......
func (s MySlice) getItem(i int) MyItem {
}
......
// Access is overrided with calling getItem()
item := ms[0] //calling ms.getItem(0)
// Is this doable?
不,运算符重载不是 Go 的特性。
引用自官方常见问题解答解释why:
如果方法分派也不需要进行类型匹配,那么它就会被简化。其他语言的经验告诉我们,使用具有相同名称但不同签名的多种方法有时是有用的,但在实践中也可能会造成混乱和脆弱。仅按名称匹配并要求类型一致是 Go 类型系统中的一个重大简化决策。
关于运算符重载,它似乎更多的是一种方便,而不是绝对的要求。同样,如果没有它,事情会变得更简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)