相关疑难解决方法(0)

在golang中调用的可比接口是什么?

我正在golang中进行一个简单的链表实现,用于学习目的.元素的定义如下:

type Element struct {
    next, prev *Element
    Value      interface{}
}
Run Code Online (Sandbox Code Playgroud)

如您所见,Value可以是满足空接口的任何东西.现在,作为一个新功能,我想这样做,当你在列表中插入一个新元素时,它会以排序的方式插入它 - 每个元素将<=下一个.

为了做到这一点,我写了以下方法:

func (l *LinkedList) Add(val interface{}) *Element {
    this := &l.Root
    e := Element{Value: val}
    for {
        if this.next.Value != nil && this.next.Value < val {  // <-comparison here
            this = this.next
        } else {
            return l.insert(&e, this)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨operator < not defined on interface哪个是公平的.所以我理解在我的Element typedef中,我应该将Value限制为可以使用<运算符进行比较的类型.我在研究golang不支持运算符重载的问题时学到了这一点 - 我不是想这样做.相反,我只是想确保Element.Value是一个可以使用<运算符进行比较的类型.我该怎么做呢?

更新:

在我看来,简单地定义基于内置的新类型可能并不困难,可以通过某种功能进行比较.所以我写了这个烂摊子(以及其他尝试做同样事情的方法):

type Comparable interface {
    LessThan(j interface{}) bool // …
Run Code Online (Sandbox Code Playgroud)

interface linked-list go comparison-operators

10
推荐指数
1
解决办法
7051
查看次数

标签 统计

comparison-operators ×1

go ×1

interface ×1

linked-list ×1