一尘不染

具有嵌入式匿名接口的结构的含义?

go

sort 包裹:

type Interface interface {
    Len() int
    Less(i, j int) bool
    Swap(i, j int)
}

...

type reverse struct {
    Interface
}

Interfacestruct中匿名接口的含义是什么reverse


阅读 284

收藏
2021-12-03

共1个答案

一尘不染

通过这种方式,反向实现了sort.Interface,我们可以覆盖特定的方法而不必定义所有其他方法

type reverse struct {
        // This embedded Interface permits Reverse to use the methods of
        // another Interface implementation.
        Interface
}

注意这里它如何交换(j,i)而不是,即使实现,(i,j)这也是为结构声明的唯一方法reverse``reverse``sort.Interface

// Less returns the opposite of the embedded implementation's Less method.
func (r reverse) Less(i, j int) bool {
        return r.Interface.Less(j, i)
}

无论在此方法中传递什么结构,我们都将其转换为新reverse结构。

// Reverse returns the reverse order for data.
func Reverse(data Interface) Interface {
        return &reverse{data}
}

如果您认为如果这种方法不可行,您将不得不做什么,那么真正的价值就来了。

  1. 将另一个Reverse方法添加到sort.Interface?
  2. 创建另一个反向接口?
  3. ……?

任何这种更改都需要跨越数千个想要使用标准反向功能的包的更多行代码。

2021-12-03