这可能不是一个好问题,因为我不知道任何支持此功能的编译语言,但由于 Go 总是让我感到惊讶,所以我还是会问它:为了我自己的练习,我正在用 Go 编写一个小计算器程序。我想知道是否有一种方法可以声明和分配“Operator”类型的变量,例如,我可以这样写:var o Operatoro = +var o1 Operatoro1 = /并像这样写函数func DoOperation(a,b int,o Operator) int{ return a o b}(不,我不是在问运算符重载。)顺便说一句,我不知道任何支持这种事情的编译语言(我不是这方面的专家)。我确实查看了操作员下的文档,但一无所获。Go可以再给我一个惊喜吗?编辑: 接受的答案指出 Haskell 支持这一点,
3 回答
慕姐8265434
TA贡献1813条经验 获得超2个赞
不,Go 运算符不是函数,因此没有有效的右手表达式。它们以通用方式工作,例如加号运算符适用于所有数字类型,也不支持中缀表示法 la haskell。
您必须使用反射编写自己的“软”通用加法函数。
一种涵盖所有需求的编译语言是 Haskell。
Qyouu
TA贡献1786条经验 获得超11个赞
你不能完全按照你说的去做,但你可以用函数来代替。您必须为每个运算符编写函数,但代码相对较少。
type BinaryOperator func(a, b int) int
func OpAdd(a, b int) int { return a + b }
func OpSub(a, b int) int { return a - b }
func ApplyBinaryOperator(a, b int, op BinaryOperator) int {
return op(a, b)
}
- 3 回答
- 0 关注
- 187 浏览
添加回答
举报
0/150
提交
取消