由于 Lua 支持一流的函数,我想知道您是否可以像在许多函数式语言中那样对运算符进行脱糖。例如,在 OCaml 中你可以这样做:
let x = (+) 3 5
上面的代码用 3 + 5
的值初始化变量 x
。编写 (+)
相当于有一个本地函数,它接受两个参数并返回它们的和。 (+) 3 5
使用两个参数 3
和 5
调用此函数。
这背后的动机是您可以将运算符直接传递给函数,而不必在之前将其包装在函数中:
local t = {"ab", "d", "c" }
local function op_greaterthan (a,b) return a>b end
table.sort (t, op_greaterthan) --would like to write: table.sort (t, (>))
谢谢!
最佳答案
你不能。
Lua 解释器很小,在处理操作符时会“走捷径”;对于解析器,它们根本不是“函数”。
如果您尝试使用不带参数的运算符,如下所示:
f(+)
然后解释器会抛出语法错误。
由于这种实现,您只能使用已经讨论过的选项:要么使用包装函数(例如 add
),要么传入字符串等某种 eval
,就像 jpjacobs 的解决方案一样。
关于lua - 脱糖 Lua 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8874676/