作为初学者,我在 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/