如果在Lua中使用花括号('{'和'}'),它们用于什么?
答案 0 :(得分:41)
表格文字。
该表是Lua中的中心类型,可以视为关联数组(哈希表或字典)或普通数组。键可以是除nil
之外的任何Lua类型的值,并且表的元素可以包含除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"})
但眼睛也不那么难。顺便说一下,使用文字值调用单参数函数也适用于字符串文字。
答案 1 :(得分:4)
答案 2 :(得分:1)
它们用于表格文字,就像你在C:
中使用的那样t = {'a', 'b', 'c'}
这是唯一常见的情况。它们不用于块分隔符。在lua表中,您可以设置不同类型的值:
t={"foo", 'b', 3}
您也可以将它们用作词典,例如Python:
t={name="foo", age=32}