如果在Lua中使用大括号('{'和'}'),它们用于什么?
表格文字.
该表是Lua中的中心类型,可以视为关联数组(哈希表或字典)或普通数组.键可以是任何Lua类型的值,除了nil
,并且表的元素可以包含任何值,除了nil
.
数组成员访问比后台的哈希密钥访问更有效,但细节通常并不重要.这实际上使得处理稀疏数组变得很方便,因为只需要为那些包含值的单元分配存储空间.
这确实导致了一个通用的基于1的数组习惯用法,这对C程序员来说有点奇怪.
例如
a = { 1, 2, 3 }
创建一个存储在变量中的数组,其中a
包含三个元素(巧合)具有与其索引相同的值.因为元素存储在以1开头的连续索引中,所以a
(由#a
或给出table.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"})
但眼睛也不那么难.顺便说一下,使用文字值调用单参数函数也适用于字符串文字.