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

在 Golang 中封装 `sort` 接口

在 Golang 中封装 `sort` 接口

Go
沧海一幻觉 2022-01-04 13:36:03
我正在尝试在 Go 中对一段结构进行排序。我可以sort.Interface通过在包的顶层定义 3 个方法来实现:type byName []*Foo // struct Foo is defined in another packagefunc (a byName) Len() int           { return len(a) }func (a byName) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }func (a byName) Less(i, j int) bool { return a[i].Name < a[j].Name }func Bar() {    var foos []*Foo // Populated by a call to an outside function    sort.Sort(byName(foos))    ...}有没有办法将 3 个方法定义(Len、Swap、 和Less)移动到Bar函数中,在 Go 中定义一个匿名方法?// Something like thisfunc Bar() {    ...    Len := func (a byName)() int { return len(a) }}可以从这个包的外部访问在顶层定义的 3 个方法吗?我猜不是,因为类型byName是本地的。
查看完整描述

1 回答

?
慕仙森

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

简单的回答,不,Go 中没有匿名方法之类的东西。

由于匿名函数不能使用接收器声明,它们实际上不是方法,因此该byName类型不会实现所需的sort.Interface.


查看完整回答
反对 回复 2022-01-04
  • 1 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

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