我最近开始学习围棋并面临下一个问题。我想实现 Comparable 接口。我有下一个代码:type Comparable interface { compare(Comparable) int}type T struct { value int}func (item T) compare(other T) int { if item.value < other.value { return -1 } else if item.value == other.value { return 0 } return 1}func doComparison(c1, c2 Comparable) { fmt.Println(c1.compare(c2))}func main() { doComparison(T{1}, T{2})}所以我收到错误cannot use T literal (type T) as type Comparable in argument to doComparison: T does not implement Comparable (wrong type for compare method) have compare(T) int want compare(Comparable) int我想我理解T没有实现的问题,Comparable因为 compare 方法作为参数T而不是Comparable.也许我错过了什么或不明白,但有可能做这样的事情吗?
1 回答
胡说叔叔
TA贡献1804条经验 获得超8个赞
你的接口需要一个方法
compare(Comparable) int
但你已经实施
func (item T) compare(other T) int { (其他 T 而不是其他 Comparable)
你应该做这样的事情:
func (item T) compare(other Comparable) int {
otherT, ok := other.(T) // getting the instance of T via type assertion.
if !ok{
//handle error (other was not of type T)
}
if item.value < otherT.value {
return -1
} else if item.value == otherT.value {
return 0
}
return 1
}
- 1 回答
- 0 关注
- 617 浏览
添加回答
举报
0/150
提交
取消