【发布时间】:2012-01-16 00:37:00
【问题描述】:
由于 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, (>))
谢谢!
【问题讨论】:
-
我不知道答案,但如果不可能,你可以自己制作函数(
function add(a, b) return a + b end) -
嗯,你能解释一下这段代码的实际作用吗?不是每个人都知道 OCaml 是什么。
-
为什么要对运营商脱糖?
-
在许多编程语言中,运算符被视为函数。例如,
1+2在字面上等同于add(1,2)。他要求一个直接等同于add的函数。function(a,b)return a+b end间接等效,因为它需要在应用实际运算符之前调用 Lua 函数。
标签: lua operators syntactic-sugar first-class-functions