lua vm 四: 表达式

lua 的表达式有一些特殊情况。


1. 被括号包起来的表达式永远被当成一个值[1]

(f(x,y,z)),即使 f 返回多个值,这个表达式永远是单个值。


2. 多返回值的调整[1]

函数调用和变长参数表达式都会产生多个值,这些表达式被称为多返回值表达式(multires expressions)。

根据多返回值表达式所处的位置,有两条规则:

  • 规则一:当多返回值表达式(multires expressions)被放在表达式列表(a list of expressions)的末尾时,此多返回值表达式的所有值会被加入此表达式列表的值列表中。

  • 规则二:当多返回值表达式被用于表达式列表但却没有出现在末尾时,此多返回值表达只有第一个值会被加入此表达式列表的值列表中。

以下是一些例子:

  • local x, y, z = 10, f(), x 取得 10,y 取得 f() 的第一个返回值,z 取得 f() 的第二个返回值。(规则一)

  • local x, y, z = f(), 10, x 取得 f() 的第一个返回值,y 取得 10,z 取得 nil。(规则二)

  • local x, y, z = f(), g(),x 取得 f() 的第一个返回值,y 取得 g() 的第一个返回值,z 取得 g() 的第二个返回值。(f 是规则一,g 是规则二)

  • {f(), 10},由 f() 的第一个返回值和 10 构成的数组。(规则一)

  • {10, f()},由 10 和 f() 的所有返回值构成的数组。(规则二)


3. 参考

1\] lua. Lists of expressions, multiple results, and adjustment. Available at https://lua.org/manual/5.4/manual.html#3.4.3.

相关推荐
VT LI2 天前
Lua 源码执行流程全解析:词法分析、语法分析、字节码生成、虚拟机执行与垃圾回收
java·开发语言·lua
历程里程碑2 天前
二叉树---二叉树的中序遍历
java·大数据·开发语言·elasticsearch·链表·搜索引擎·lua
上海合宙LuatOS3 天前
LuatOS扩展库API——【exremotefile】远程文件管理系统
物联网·lua·luatos
上海合宙LuatOS3 天前
LuatOS扩展库API——【exremotecam】网络摄像头控制
开发语言·网络·物联网·lua·luatos
专吃海绵宝宝菠萝屋的派大星4 天前
使用postman测试自己编写的mcp服务
测试工具·lua·postman
一个有温度的技术博主4 天前
Lua语法详解:从变量声明到循环遍历的避坑指南
redis·缓存·lua
上海合宙LuatOS4 天前
LuatOS扩展库API——【exmodbus】MODBUS协议
物联网·lua·luatos
一个有温度的技术博主4 天前
Lua语法进阶:函数封装与条件控制的艺术
redis·分布式·缓存·lua
小李云雾5 天前
FastAPI 后端开发:文件上传 + 表单提交
开发语言·python·lua·postman·fastapi
曼巴UE55 天前
Unlua 官方案例
c++·ue5·lua·ue