-1

有人可以向我解释为什么不允许这种实现吗?我有一个函数,它将函数定义为参数的接口。这会引发错误。

package main

import (
    "fmt"
)

type Anode int

func (a Anode) IsLess(node Anode) bool { return a < node }

type Node interface {
    IsLess(node Node) bool
}

func test(a, b Node) bool {
    return a.IsLess(b)
}
func main() {
    a := Anode(1)
    b := Anode(2)
    fmt.Println(test(a, b))
}

4

1 回答 1

6

签名不一样。参数类型不同:

IsLess(Node) bool  // interface argument type is `Node` 
IsLess(Anode) bool // method argument type is `Anode`

要解决此问题 - 更改您的方法以使用参数类型Node。然后,您需要一种Value()方法来转换Anode为可比较的类型(例如int):

func (a Anode) IsLess(node Node) bool { return a.Value() < node.Value() }
func (a Anode) Value() int            { return int(a) }

并将其添加到您的接口定义中:

type Node interface {
    IsLess(node Node) bool
    Value() int // <-- add this
}

游乐场: https: //play.golang.org/p/TmGcBpUQzGs

于 2020-08-25T20:40:03.243 回答