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

Go 是否支持运算符类型变量?

Go 是否支持运算符类型变量?

Go
慕后森 2021-07-29 22:01:16
这可能不是一个好问题,因为我不知道任何支持此功能的编译语言,但由于 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。


查看完整回答
反对 回复 2021-08-02
?
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)

}



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

添加回答

举报

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