【发布时间】:2018-08-31 19:20:56
【问题描述】:
在 GoLang 中,可以使用函数作为参数,例如在这个简单的示例中,根据小于或等于 (<=) 或大于或等于运算符 (>=) 比较两个数字)
package main
func leq(x, y int) bool {
return x <= y
}
func geq(x, y int) bool {
return x >= y
}
func compare(x, y int, comparator func(int, int) bool) bool {
return comparator(x, y)
}
func main() {
println(compare(3, 5, leq)) //true
println(compare(5, 3, leq)) //false
println(compare(3, 5, geq)) //false
println(compare(5, 3, geq)) //true
}
有没有办法让中缀运算符而不是函数作为函数参数?
如:
func compare(x, y int, comparator <something here>) bool {
return comparator(x, y)
}
func main() {
println(compare(3, 5, <=)) //true
println(compare(5, 3, <=)) //false
println(compare(3, 5, >=)) //false
println(compare(5, 3, >=)) //true
}
或者我最好的选择是像第一个示例那样为运算符编写包装器?
另外,如果上述情况可行,是否可以将中缀运算符参数与中缀语法一起使用?比如
func compare(x, y int, c <something here>) bool {
return x c y
}
【问题讨论】:
-
不,不是。您只能传递值(基元、结构、映射、数组、切片、通道、函数、接口和指针)。
标签: go parameters parameter-passing infix-operator