去糖化 Lua 运算符
2012-1-16 8:56:21
收藏:0
阅读:118
评论:2
由于 Lua 支持一级函数,我想知道是否可以像许多函数式语言一样去除操作符。例如,在 OCaml 中,你可以这样做:
let x = (+) 3 5
上面的代码将变量 x
初始化为 3 + 5
的值。写 (+)
等同于有一个本地函数,它接受两个参数并返回它们的总和。(+) 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, (>))
感谢!
原文链接 https://stackoverflow.com/questions/8874676
点赞
stackoverflow用户312586
你不行。
Lua 解释器非常小,对于操作符它“使用快捷方式”,对于解析器而言,它们只是没有“函数”。
如果你尝试在不带参数的情况下使用运算符,就像这样:
f(+)
那么解释器将会抛出语法错误。
由于这种实现方式,你只能使用已经讨论过的选项:要么使用包装函数(如 add
),要么传入字符串并进行某种类似于 jpjacobs' 解决方案的“评估”。
2012-01-16 14:21:33
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
是的,你可以这么做(我不明白这样做的意义,并且它会变得更慢,但是这是可能的):
do local mem={} function unsugar(op,a,b) if mem[op] then print('从内存中获取操作') return mem[op](a,b) else local f=loadstring('local a,b=...; return a '..op..' b') mem[op]=f return f(a,b) end end end print(unsugar('+',1,2)) -- = 3 print(unsugar('%',5,3)) -- = 2 print(unsugar('%',5,3)) -- = 从内存中获取操作 \n 2
编辑:消除公共 a 和 b,加入 memoizing 来提高性能,只编译每个操作一次。