使用Lua语言的Corona - 将文本转换为公式
2015-12-7 23:25:13
收藏:0
阅读:58
评论:1
有没有办法将字符串 "1 + 2 * 3" 转换成变量中的 1 + 2 * 3 呢?数字并不重要,我只是想弄清楚如何让 Lua 将字符串计算成数字。tonumber() 不能用于此。
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在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中获取用户配置主目录的跨平台方法
如果你只需要简单的计算,那么像这样的函数可能会有用:
function calculator(expression) expression = expression:gsub("%s+", "") while true do local head, op1, op, op2, tail = expression:match("(.-)(%d+)([%*/])(%d+)(.*)") if not op then break end expression = head .. tostring(op == '*' and op1 * op2 or op1 / op2) .. tail end while true do local head, op1, op, op2, tail = expression:match("(.-)(%d+)([%+%-])(%d+)(.*)") if not op then break end expression = head .. tostring(op == '+' and op1 + op2 or op1 - op2) .. tail end return tonumber(expression) end function calculator(expression) expression = expression:gsub("%s+","") local n repeat expression, n = expression:gsub("(%d+)([%*/])(%d+)", function(op1,op,op2) return tostring(op == '*' and op1 * op2 or op1 / op2) end, 1) until n == 0 repeat expression, n = expression:gsub("(%d+)([%+%-])(%d+)", function(op1,op,op2) return tostring(op == '+' and op1 + op2 or op1 - op2) end, 1) until n == 0 return tonumber(expression) end print(calculator('1 + 2') == 3) print(calculator('1+2+3') == 6) print(calculator('1+2-3') == 0) print(calculator('1+2*3') == 7) print(calculator('1+2*3/6') == 2) print(calculator('1+4/2') == 3) print(calculator('1+4*2/4/2') == 2) print(calculator('a+b') == nil)有两个名为
calculator的函数,它们以稍微不同的方式完成相同的任务:它们将表达式折叠到只有一个数字为止。"1+2*3/6"被转换为"1+6/6",然后变成"1+1",最后变成"2",作为数字返回。