• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Lua中的table构造式(tableconstructor)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最简单的构造式就是一个空构造式{},用于创建一个空table。

构造式还可以用于初始化数组。例如,以下语句:
days = {"Sunday", "Monday", "Tuesday", "Wednesday",
        "Thursday", "Friday", "Saturday"}
会将days[1]初始化为字符串“Sunday”、days[2]初始化为"Monday",以此类推。

Lua还提供了一种特殊的语法用于初始化记录风格的table:
a = {x=10, y=20}
以上这行代码等价于这些语句:
a = {}; a.x=10; a.y=20

无论使用哪种方式来创建table,都可以在table创建之后添加或删除其中的某些字段。

【使用table编写链表】
我们可以使用这样的方式使用table编写一个链表代码:每当Lua评估一个构造式时,都会先创建一个新table,然后初始化它。如下:
list = nil
for line in io.lines() do
    list = {next=list, value=line}
end
这段代码从标准输入中读取每行的内容,然后将每行按相反的次序存储到一个链表中。链表的每个节点都是一个table,table中含有两个字段:value(每行的内容)和next(指向下一个结点的引用)。以下代码便利了改练表,并打印了其内容:
local l = list
while l do
    print(l.value)
    l = l.next
end

可以将记录风格的初始化与列表风格的初始化混合在一个构造式中使用:
polyline = {color="blue",thickness=2,npoints=4,
            {x=0, y=0},
            {x=-10, y=0},
            {x=-10, y=1},
            {x=0, y=1}
        }
print(polyline[2].x)    --> -10
print(polyline[4].y)    --> 1

这两种风格(列表风格和记录风格)的构造式各有其限制。例如,不能使用负数的索引,也不能用运算符作为记录的字段名。为了满足这些要求,Lua还提供了一种更通用的格式。这种格式允许在方括号之间,显式地用一个表达式来初始化索引值:
opnames = {["+"] = "add", ["-"] = "sub",
           ["*"] = "mul", ["/"] = "div"}

i = 20; s = "-"
a = {[i+0] = s, [i+1] = s .. s, [i+2] = s .. s .. s}

print(opnames[s])   --> sub
print(a[22])        --> ---
这种语法看似烦琐了一点,但却非常灵活。无论是列表风格的初始化,还是记录风格的初始化,其实都是这种通用语法特例。构造式{x=0,y=0}等价于{["x"]=0,["y"]=0},构造式{"r","g","b"}等价于{[1]="r",[2]="g",[3]="b"}。
对于某些特殊情况如果真的需要以0作为一个数组的起始索引的话,通过这种语法也可以轻松做到:
days = {[0]="Sunday","Monday","Tuesday","Wednesday",
        "Thursday","Friday","Saturday"}

在一个构造式中还可以用分号(;)替代逗号(,)。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
LUA重难点解析发布时间:2022-07-22
下一篇:
Windows下为Lua脚本进行加密处理发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap