Lua中使用花括号吗?

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

原文链接 https://stackoverflow.com/questions/686931

点赞
stackoverflow用户3153
stackoverflow用户3153

list/dictionary构造器(即表类型构造器)

如果您说的是代码块,则它们不用于代码块。对于此,Lua只是使用end关键字来结束块。

在这里查看

2009-03-26 18:08:32
stackoverflow用户68204
stackoverflow用户68204

表是 Lua 中的核心类型,可以被看作是一个关联数组(哈希表或字典)或普通数组。键可以是 Lua 中的任何类型除了 nil,表的元素可以保存任何值除了 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"})

但是更加容易读懂。顺便说一下,对于字符串字面量,使用字面量调用单个参数函数也是有效的。

2009-03-26 21:31:06
stackoverflow用户87584
stackoverflow用户87584

下面是翻译结果,并保持原有的 Markdown 格式:

它们用于表面值,就像您在 C 中使用的一样:

t = {'a', 'b', 'c'}

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

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

您还可以像 Python 一样使用它们作为字典:

t={name="foo", age=32}
2009-04-06 12:22:11