lua - 为什么即使没有选择表中的函数也会被调用

标签 lua lua-table

作为初学者,我在 Lua 中有一个简单的问题:

a = function()
   print("hello")
end

b = {125, 116, a()}

   print(b[1])

它应该只打印 125 , 但也会打印 hello也。即使未选择表值。

最佳答案

正如所写,您已经创建了一个分配给 a 的函数。不带参数也不返回任何内容;它有打印“hello”的副作用。

然后创建一个存储在 b 中的表。具有三个表达式:b[1]b[2]是数字,b[3]是调用存储在a中的函数的结果, 将按照常规规则通过填充根据需要调整为单个值 nil .所以b将是一个只包含两个条目的表格,都是数字。但是,a()在创建 b 时调用的值,打印“你好”。

最后,您调用print(b[1])打印预期的数字。

这完全解释了您看到的输出。由于这可能不是您期望看到的输出,您可以通过多种方式解决此问题。

例如,声明 a返回“你好”而不是调用打印。

a = function() return "hello" end

然后在构造存储在 b 中的表时调用它不会打印任何东西,b将获得第三个元素,字符串“hello”。

或者,您可以将函数存储在 b 中。通过省略导致它被调用的括号。
b = {125, 116, a}

再次,b包含一个由三个元素组成的表。在这种情况下,b[3]是打印“hello”的函数。

您选择做什么完全取决于您对存储在 b 中的表中的值的预期用途。 .

关于lua - 为什么即使没有选择表中的函数也会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19203005/

相关文章:

lua - 如何避免 Lua 脚本限制中的 Redis 调用?

lua - 如何在 Lua 中使用本身就是表的唯一键来实现映射?

lua - 从 Lua 中的(最简单的)函数直接返回表条目

lua - 为什么短调用形式不适用于 Lua 5.3 中的表?

c - 是否需要为本地范围处理复制表字符串?

lua - Redis中 "GROUP BY"怎么办

oop - 为什么.__index只返回子类的函数而不返回基类的函数

lua - 将源输入从文件更改为 translate.lua 中的字符串

lua - 如何将 'unpack'表转换为函数参数

Lua类不工作