gpt4 book ai didi

go - 如何比较函数类型的相等性?

转载 作者:IT王子 更新时间:2023-10-29 01:47:24 25 4
gpt4 key购买 nike

我正在做一些测试并尝试测试某些函数类型的相等性。我有 https://play.golang.org/p/GeE_YJF5lz :

package main

import (
"fmt"
"reflect"
)

type myStruct struct {
f []someFunc
}

type someFunc func(a string) bool

var sf1 someFunc = func(a string) bool {
return true
}

var sf2 someFunc = func(a string) bool {
return false
}

func main() {
a := []someFunc{sf1, sf2}
b := []someFunc{sf1, sf2}

fmt.Println(reflect.DeepEqual(a, b)) // false

m := &myStruct{
f: []someFunc{sf1, sf2},
}

n := &myStruct{
f: []someFunc{sf1, sf2},
}

fmt.Println(reflect.DeepEqual(m, n)) // false
}

我无法在文档中找到任何关于比较函数的内容,并且我知道我一定遗漏了一些关于为什么 reflect.DeepEqual 不能正常工作的重要信息。

最佳答案

您可以像这样比较函数,在此处阅读有关函数表示的更多信息:http://golang.org/s/go11func

func funcEqual(a, b interface{}) bool {
av := reflect.ValueOf(&a).Elem()
bv := reflect.ValueOf(&b).Elem()
return av.InterfaceData() == bv.InterfaceData()
}

例如:这只是您的起点的想法。

func main() {
a := []someFunc{sf1, sf2}
b := []someFunc{sf1, sf2}

for idx, f := range a {
fmt.Println("Index: ", idx, funcEqual(f, b[idx]))
}
}

输出:

Index:  0 true
Index: 1 true

播放链接:https://play.golang.org/p/6cSVXSYfa5

关于go - 如何比较函数类型的相等性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45134172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com