如果在 Lua 中使用大括号('{' 和 '}'),它们是做什么用的?
3 回答
表文字。
表是 Lua 中的中心类型,可以被视为关联数组(哈希表或字典)或普通数组。键可以是除 之外的任何 Lua 类型的值,nil
表的元素可以包含除 之外的任何值nil
。
数组成员访问比后台哈希键访问更有效,但细节通常并不重要。这实际上使得处理稀疏数组很方便,因为只需要为那些包含值的单元格分配存储空间。
这确实导致了一个通用的基于 1 的数组习语,这对 C 程序员来说有点奇怪。
例如
a = { 1, 2, 3 }
创建一个存储在变量中的数组,其中a
包含三个元素(巧合地)与它们的索引具有相同的值。因为元素存储在从 1 开始的顺序索引中,所以a
(由#a
or给出table.getn(a)
)的长度为 3。
可以像这样使用非整数键初始化表:
b = { one=1, pi=3.14, ["half pi"]=1.57, [function() return 17 end]=42 }
whereb
将有名为“one”、“pi”、“half pi”的条目和一个匿名函数。当然,在不迭代表的情况下查找最后一个元素可能会很棘手,除非该函数的副本存储在其他变量中。
花括号出现的另一个地方实际上是相同的语义含义,但它被隐藏在一些语法糖后面(对于 Lua 的新用户)。编写带有单个参数的函数是很常见的,该参数应该是一个表。在这种情况下,调用函数不需要使用括号。这导致代码似乎包含混合()
并{}
显然用作函数调用运算符。
btn = iup.button{title="ok"}
相当于
btn = iup.button({title="ok"})
但对眼睛的伤害也较小。顺便说一句,使用文字值调用单参数函数也适用于字符串文字。
它们用于表文字,就像您在 C 中使用的那样:
t = {'a', 'b', 'c'}
这是唯一常见的情况。它们不用于块分隔符。在 lua 表中,您可以放置不同类型的值:
t={"foo", 'b', 3}
您也可以将它们用作字典,就像 Python 一样:
t={name="foo", age=32}