【发布时间】:2020-06-22 01:10:04
【问题描述】:
我已经能够为没有接收器参数的方法制作函数映射。这是一个例子。
var funcMap = map[string]func() bool {
"&" : And,
}
func And() bool {
return true && false
}
但是,如果我的函数有一个接收器参数,我如何将它添加到函数映射中?下面的代码不起作用,但试图显示我想要做什么。
type Operand struct {
Operator string
Arg1 interface{}
Arg2 interface{}
}
var funcMap = map[string]Operand.func() bool {
"&" : Operand.And,
}
func (o *Operand) And() bool {
return argToBool(o.Arg1) && argToBool(o.Arg2)
}
【问题讨论】:
-
@super 我相信这个问题问的问题与我想做的有点不同。我可以使用的一种选择是使用链接问题的答案中提供的反射。但是我认为我的问题有所不同,kashyap-kn 提供的答案是此用例的更好解决方案。
-
我会说这只是一个偏好问题。要么你有一个签名
func(Operand*) bool的函数,你可以把它包装在一个接口中,或者你有一个接口,它包装了一个工作函数和两个参数。最后,它们基本上是一样的。 -
欺骗的优点是它展示了 2 种惯用的 golang 方法来将函数与接收器绑定。隐式绑定或转换为以接收者为第一个参数的函数。语言核心功能都支持两者。
标签: go