在下面的代码中,我定义了一个通用链表。Go1.18 很乐意使用列表的实例作为映射的键。但是,最后一行未注释时不会编译;我收到错误:
Cons[int] 没有实现 comparable
是否有我可以使用的较弱类型约束来挑选出可用作键的类型,或者这是有意为之,还是编译器错误?
package main
import "fmt"
type List[X any] interface {
isList()
}
type Cons[X any] struct {
Data X
Next List[X]
}
func (Cons[X]) isList() {}
type Nil[X any] struct{}
func (Nil[X]) isList() {}
func id[X comparable](x X) X { return x }
func main() {
x := Cons[int]{5, Nil[int]{}}
m := map[List[int]]string{}
m[x] = "Hi" // succeeds
fmt.Println(m[x]) // prints "Hi"
// fmt.Println(id(x)) // fails
}
森林海
相关分类