为什么 Lua 中函数未选中却自动被调用?
- 内容介绍
- 文章标签
- 相关推荐
本文共计413个文字,预计阅读时间需要2分钟。
作为初学者,我在Lua中遇到了一个简单的问题:`+a=function() print(hello) end b={125, 116, a()} print(b[1])` 它应该只打印125,但它也打印了hello。这是因为函数`a()`在创建表`b`时被调用了。我创建了一个函数,并将其分配给了表`b`的元素。
作为初学者,我在Lua中遇到了一个简单的问题:a = function() print("hello") end b = {125, 116, a()} print(b[1])
它应该只打印125,但也打印你好.即使未选择表值.
如上所述,您创建了一个函数,您将其分配给不带参数且不返回任何内容的函数;它具有印刷“你好”的副作用.然后创建一个存储在b中的表,它有三个表达式:b [1]和b [2]是数字,b [3]是调用存储在a中的函数的结果,它将通过通常的规则调整为通过nil填充所需的单个值.所以b将是一个只包含两个条目的表,两个数字.但是,在创建b的值时调用a(),打印出“hello”.
最后,调用print(b [1])打印预期的数字.
这完全解释了你看到的输出.由于这可能不是您期望看到的输出,您可以通过多种方式解决此问题.
例如,声明a返回“hello”而不是调用print.
a = function() return "hello" end
然后在构造存储在b中的表时调用它将不会打印任何内容,并且b将获得第三个元素,即字符串“hello”.
或者,您可以通过省略导致它被调用的括号来存储b中所写的函数.
b = {125, 116, a}
同样,b包含一个由三个元素组成的表.在这种情况下,b [3]是打印“hello”的函数.
您选择做什么完全取决于您对b中表中存储的值的预期用途.
本文共计413个文字,预计阅读时间需要2分钟。
作为初学者,我在Lua中遇到了一个简单的问题:`+a=function() print(hello) end b={125, 116, a()} print(b[1])` 它应该只打印125,但它也打印了hello。这是因为函数`a()`在创建表`b`时被调用了。我创建了一个函数,并将其分配给了表`b`的元素。
作为初学者,我在Lua中遇到了一个简单的问题:a = function() print("hello") end b = {125, 116, a()} print(b[1])
它应该只打印125,但也打印你好.即使未选择表值.
如上所述,您创建了一个函数,您将其分配给不带参数且不返回任何内容的函数;它具有印刷“你好”的副作用.然后创建一个存储在b中的表,它有三个表达式:b [1]和b [2]是数字,b [3]是调用存储在a中的函数的结果,它将通过通常的规则调整为通过nil填充所需的单个值.所以b将是一个只包含两个条目的表,两个数字.但是,在创建b的值时调用a(),打印出“hello”.
最后,调用print(b [1])打印预期的数字.
这完全解释了你看到的输出.由于这可能不是您期望看到的输出,您可以通过多种方式解决此问题.
例如,声明a返回“hello”而不是调用print.
a = function() return "hello" end
然后在构造存储在b中的表时调用它将不会打印任何内容,并且b将获得第三个元素,即字符串“hello”.
或者,您可以通过省略导致它被调用的括号来存储b中所写的函数.
b = {125, 116, a}
同样,b包含一个由三个元素组成的表.在这种情况下,b [3]是打印“hello”的函数.
您选择做什么完全取决于您对b中表中存储的值的预期用途.

