覆盖接口的特定方法
Override a specific method of interface
我想实现一个稍微自定义的接口版本。让我们以实现整个接口的 sort.Interface as an example. We already have sort.IntSlice 为例。但是我想实现一个 AbsoluteSort 算法。为此,我只想更改 Less
方法。像这样:
type AbsSortedArray struct {
sort.IntSlice
}
func (a AbsSortArray) Less(i, j int) bool {
return abs(a[i]) < abs(a[j]) // this causes an error as I don't have access to underlying array here
}
func abs(i int) int {
if i < 0 {
return i * -1
}
return i
}
所以基本上我想要实现的是:
- 从父
继承其他方法,如Len
和Swap
- 覆盖
Less
方法,但是不是为了stubbing/mocking,而是我想要访问底层对象,以便我仍然可以实现我的自定义逻辑。
I don't have access to underlying array here
实际上,你这样做:
func (a AbsSortArray) Less(i, j int) bool {
return abs(a.IntSlice[i]) < abs(a.IntSlice[j])
}
但是这个 AbsSortedArray
是一种使用起来很麻烦的数据类型(因为现在您必须处理带有 slice 成员的结构,而不是直接使用 slice)。在此特定示例中,仅提供您自己的从头开始实施可能会更具可读性和可维护性。
我想实现一个稍微自定义的接口版本。让我们以实现整个接口的 sort.Interface as an example. We already have sort.IntSlice 为例。但是我想实现一个 AbsoluteSort 算法。为此,我只想更改 Less
方法。像这样:
type AbsSortedArray struct {
sort.IntSlice
}
func (a AbsSortArray) Less(i, j int) bool {
return abs(a[i]) < abs(a[j]) // this causes an error as I don't have access to underlying array here
}
func abs(i int) int {
if i < 0 {
return i * -1
}
return i
}
所以基本上我想要实现的是:
- 从父 继承其他方法,如
- 覆盖
Less
方法,但是不是为了stubbing/mocking,而是我想要访问底层对象,以便我仍然可以实现我的自定义逻辑。
Len
和Swap
I don't have access to underlying array here
实际上,你这样做:
func (a AbsSortArray) Less(i, j int) bool {
return abs(a.IntSlice[i]) < abs(a.IntSlice[j])
}
但是这个 AbsSortedArray
是一种使用起来很麻烦的数据类型(因为现在您必须处理带有 slice 成员的结构,而不是直接使用 slice)。在此特定示例中,仅提供您自己的从头开始实施可能会更具可读性和可维护性。