如何使用函数作为地图的键

如何使用函数作为地图的键?例如:


type Action func(int)

func test(a int) { }

func test2(a int) { }


func main() {

  x := map[Action]bool{}

  x[test] = true

  x[test2] = false

}

这些代码会显示错误: invalid map key type Action


慕妹3146593
浏览 196回答 3
3回答

HUX布斯

您不能将函数用作映射键。该语言规范明确表示:必须为键类型的操作数完全定义比较运算符 == 和 !=;因此键类型不能是函数、映射或切片。

肥皂起泡泡

您不能将函数用作映射中的键:键类型必须具有可比性。映射键可以是任何可比较的类型。语言规范对此进行了精确定义,但简而言之,可比较的类型是布尔值、数字、字符串、指针、通道和接口类型,以及仅包含这些类型的结构或数组。值得注意的是,列表中没有切片、映射和函数;这些类型不能使用 == 进行比较,并且不能用作映射键根据您的具体用例,您可能使用的是接口。

慕神8447489

您可以使用reflect.    import (       "reflect"       "math"    )    func foo () {       table := make(map[uintptr] string)       table[reflect.ValueOf(math.Sin)] = "Sin"       table[reflect.ValueOf(math.Cos)] = "Cos"       println(table[reflect.ValueOf(math.Cos)])    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go