В 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
}