doumei4964 2017-03-09 20:32
浏览 38
已采纳

如何使两个对象具有可比性

I'm passing objects of two different structs to a function where it's compared with an existing object saved as interface {} type.

In the following how can I make two objects comparable for Equality ===

In this attempt, comparison with bar works fine but with foo it throws a panic error in spite both objects are of struct type

Go Playground

package main

import "fmt"

type Foo struct {
    TestMethod func(str string)
}

type Bar struct {}

type IQux interface {
    Compare(object interface{}) bool
}

type Qux struct {
    Method func(str string)
    Reference interface{}
}

func (qux Qux) Compare(object interface{}) bool {
    return object == qux.Reference
}

func testMethod(str string) {
    fmt.Println(str)
}

func main() {
    foo := Foo{TestMethod:testMethod}
    bar := Bar{}

    ob := &Qux{Method: foo.TestMethod, Reference: foo}

    ob.Compare(bar) // works fine
    ob.Compare(foo) // panic: runtime error: comparing uncomparable type main.Foo
}
  • 写回答

1条回答 默认 最新

  • 普通网友 2017-03-10 01:38
    关注

    You have a little typo, just try:

    package main
    
    import "fmt"
    
    type Foo struct {
        TestMethod func(str string)
    }
    
    type Bar struct {}
    
    type IQux interface {
        Compare(object interface{}) bool
    }
    
    type Qux struct {
        Method func(str string)
        Reference interface{}
    }
    
    func (qux Qux) Compare(object interface{}) bool {
        return object == qux.Reference
    }
    
    func testMethod(str string) {
        fmt.Println(str)
    }
    
    func main() {
        foo := &Foo{TestMethod:testMethod}
        bar := Bar{}
    
        ob := Qux{Method: foo.TestMethod, Reference: foo}
    
        ob.Compare(bar) // works fine
        ob.Compare(foo) // panic: runtime error: comparing uncomparable type main.Foo
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大