lua - 脱糖 Lua 运算符

标签 lua operators syntactic-sugar first-class-functions

由于 Lua 支持一流的函数,我想知道您是否可以像在许多函数式语言中那样对运算符进行脱糖。例如,在 OCaml 中你可以这样做:

let x = (+) 3 5

上面的代码用 3 + 5 的值初始化变量 x。编写 (+) 相当于有一个本地函数,它接受两个参数并返回它们的和。 (+) 3 5 使用两个参数 35 调用此函数。 这背后的动机是您可以将运算符直接传递给函数,而不必在之前将其包装在函数中:

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/

相关文章:

java - Java 'for each' 循环如何工作?

security - 在Lua运行时禁用对os和io库的访问

python - Keras 的功能类似于 Torch 中的 View

lua - Lua中doFile和require有什么区别

jquery - 使用 javascript 组合两个变量以将新变量设置为已声明的变量

ios - 在 Swift 中,为什么 "let _ = this"比 "this != nil"快?

c - 复制lua函数的开销

c++ - 为什么 (new Foo())->baa() 有效而 new Foo()->baa() 无效?

c++ - 如果 (a) b = c, d = e, return; 为什么这将无法编译?

php - 方法语法 "public function direct(){}"在 PHP 中如何工作?