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

这可能不是一个好问题,因为我不知道任何支持此功能的编译语言,但由于 Go 总是让我感到惊讶,所以我还是会问它:


为了我自己的练习,我正在用 Go 编写一个小计算器程序。我想知道是否有一种方法可以声明和分配“Operator”类型的变量,例如,我可以这样写:


var o Operator


o = +


var o1 Operator


o1 = /

并像这样写函数


func DoOperation(a,b int,o Operator) int{


    return a o b


}

(不,我不是在问运算符重载。)


顺便说一句,我不知道任何支持这种事情的编译语言(我不是这方面的专家)。我确实查看了操作员下的文档,但一无所获。Go可以再给我一个惊喜吗?


编辑: 接受的答案指出 Haskell 支持这一点,


慕后森
浏览 188回答 3
3回答

慕姐8265434

不,Go 运算符不是函数,因此没有有效的右手表达式。它们以通用方式工作,例如加号运算符适用于所有数字类型,也不支持中缀表示法 la haskell。您必须使用反射编写自己的“软”通用加法函数。一种涵盖所有需求的编译语言是 Haskell。

Qyouu

你不能完全按照你说的去做,但你可以用函数来代替。您必须为每个运算符编写函数,但代码相对较少。type BinaryOperator func(a, b int) intfunc 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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go