syntax - Lua中使用花括号吗?

标签 syntax lua

如果在Lua中使用大括号(“ {”和“}”),它们的用途是什么?

最佳答案

表文字。

该表是Lua中的中心类型,可以视为关联数组(哈希表或字典)或普通数组。键可以是nil以外的任何Lua类型的值,并且表的元素可以包含nil以外的任何值。

数组成员的访问比在后台进行哈希键访问更有效,但是细节通常并不重要。实际上,这使得处理稀疏数组变得很方便,因为仅需要为那些完全包含值的单元分配存储。

这确实导致了通用的基于1的数组习惯用法,这对C程序员来说有点奇怪。

例如

a = { 1, 2, 3 }


创建一个存储在变量a中的数组,其中包含三个元素(巧合)的值与其索引相同。因为元素存储在以1开头的顺序索引中,所以a的长度(由#atable.getn(a)给出)为3。

可以使用非整数键初始化表,如下所示:

b = { one=1, pi=3.14, ["half pi"]=1.57, [function() return 17 end]=42 }


其中b将具有名为“ one”,“ pi”,“ half pi”的条目和一个匿名函数。当然,在没有迭代表的情况下查找最后一个元素可能很棘手,除非将该功能的副本存储在其他变量中。

花括号出现的另一个地方实际上是相同的语义,但是(对于Lua的新用户而言)隐藏在某些语法糖之后。编写带有单个参数(应该是表)的函数是很常见的。在这种情况下,调用该函数不需要使用括号。这导致看起来似乎包含(){}的混合代码,显然都被用作函数调用运算符。

btn = iup.button{title="ok"}


相当于

btn = iup.button({title="ok"})


但眼睛也较轻。附带地,用文字值调用单参数函数也适用于字符串文字。

关于syntax - Lua中使用花括号吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686931/

相关文章:

bash - 在 shell 脚本的一行末尾有多余的分号吗?

syntax - 使用多个匹配项时,是否有更简单的方法来绑定(bind)整个匹配项?

lua - 我传递给 lua 脚本的参数为零

c - 包含数组下标的表达式可以是标识符吗?

Vim 对象选择与语法感知文本对象

java - 什么时候在方法右括号后加分号?

lua - 将字符串保存在 lua 表中

lua - torch Lua : Why is my gradient descent not optimizing the error?

c - 使用 Lua C API 遍历表的表

lua - 在lua中显示表格的内容