为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕妹3146593 2021-09-09 15:13:43
如何使用函数作为地图的键?例如: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
查看完整描述

3 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

您不能将函数用作映射键。该语言规范明确表示:

必须为键类型的操作数完全定义比较运算符 == 和 !=;因此键类型不能是函数、映射或切片。


查看完整回答
反对 回复 2021-09-09
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

您不能将函数用作映射中的键:键类型必须具有可比性。

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

根据您的具体用例,您可能使用的是接口。


查看完整回答
反对 回复 2021-09-09
?
慕神8447489

TA贡献1780条经验 获得超1个赞

您可以使用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)])

    }


查看完整回答
反对 回复 2021-09-09
  • 3 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信