Lua中使用了大括号吗?

时间:2009-03-26 18:07:08

标签: syntax lua

如果在Lua中使用花括号('{'和'}'),它们用于什么?

3 个答案:

答案 0 :(得分:41)

表格文字。

该表是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"})

但眼睛也不那么难。顺便说一下,使用文字值调用单参数函数也适用于字符串文字。

答案 1 :(得分:4)

list / ditionary构造函数(即表类型构造函数)。

如果这是你的意思,它们不会用于代码块。因为Lua只使用end关键字来结束块。

See here

答案 2 :(得分:1)

它们用于表格文字,就像你在C:

中使用的那样
t = {'a', 'b', 'c'}

这是唯一常见的情况。它们不用于块分隔符。在lua表中,您可以设置不同类型的值:

t={"foo", 'b', 3}

您也可以将它们用作词典,例如Python:

t={name="foo", age=32}