在 Golang 中封装 `sort` 接口
Encapsulating `sort` Interface in Golang
我正在尝试对 Go 中的一片结构进行排序。我可以通过在包的顶层定义 3 个方法来实现 sort.Interface
:
type byName []*Foo // struct Foo is defined in another package
func (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 this
func Bar() {
...
Len := func (a byName)() int { return len(a) }
}
顶层定义的 3 个方法可以从这个包外部访问吗?我猜不是,因为类型 byName
是本地的。
简单回答,不,Go中没有匿名方法
由于无法使用接收器声明匿名函数,因此它们实际上不是方法,因此 byName
类型不会实现所需的 sort.Interface
.
我正在尝试对 Go 中的一片结构进行排序。我可以通过在包的顶层定义 3 个方法来实现 sort.Interface
:
type byName []*Foo // struct Foo is defined in another package
func (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 this
func Bar() {
...
Len := func (a byName)() int { return len(a) }
}
顶层定义的 3 个方法可以从这个包外部访问吗?我猜不是,因为类型 byName
是本地的。
简单回答,不,Go中没有匿名方法
由于无法使用接收器声明匿名函数,因此它们实际上不是方法,因此 byName
类型不会实现所需的 sort.Interface
.