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.

相关推荐

  1. lua vm : 表达式

    2024-06-07 09:42:04       25 阅读
  2. 、正则表达式

    2024-06-07 09:42:04       30 阅读
  3. CMakeLists.txt语法规则:条件判断中表达式说明

    2024-06-07 09:42:04       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 09:42:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 09:42:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 09:42:04       82 阅读
  4. Python语言-面向对象

    2024-06-07 09:42:04       91 阅读

热门阅读

  1. 获取gitee上某个组织所有仓库的介绍

    2024-06-07 09:42:04       29 阅读
  2. 系统研发安全漏洞

    2024-06-07 09:42:04       27 阅读
  3. vue el-dialog封装成子组件(组件化)

    2024-06-07 09:42:04       26 阅读
  4. react-intl国际化在项目中的使用

    2024-06-07 09:42:04       29 阅读
  5. 浅谈人机交互

    2024-06-07 09:42:04       25 阅读
  6. 人机交互中的阴差阳错

    2024-06-07 09:42:04       25 阅读
  7. 解决nginx无法获取带下划线的header值

    2024-06-07 09:42:04       31 阅读
  8. 单双目视频转图片

    2024-06-07 09:42:04       24 阅读
  9. 常见排序算法,快排,希尔,归并,堆排

    2024-06-07 09:42:04       23 阅读