测试代码:
local t = {1, [1] = "a", [2] = "b"}
print("t[1]: ", t[1])
for _, v in pairs(t) do
print(v)
end
Run Code Online (Sandbox Code Playgroud)
输出:
t[1]: 1
1
b
Run Code Online (Sandbox Code Playgroud)
如果您有重复的键,则未定义在表构造函数中设置字段的顺序。
当前,编译器将批处理列表项(每批50个列表项)。
通过luac -l在脚本上运行,可以看到构造函数的字节码:
1 [1] NEWTABLE 0 1 2
2 [1] LOADK 1 -1 ; 1
3 [1] SETTABLE 0 -1 -2 ; 1 "a"
4 [1] SETTABLE 0 -3 -4 ; 2 "b"
5 [1] SETLIST 0 1 1 ; 1
Run Code Online (Sandbox Code Playgroud)
注意最后的SETLIST。对于{10,20,30, [1] = "a", [2] = "b"},字节码为:
1 [1] NEWTABLE 0 3 2
2 [1] LOADK 1 -1 ; 10
3 [1] LOADK 2 -2 ; 20
4 [1] LOADK 3 -3 ; 30
5 [1] SETTABLE 0 -4 -5 ; 1 "a"
6 [1] SETTABLE 0 -6 -7 ; 2 "b"
7 [1] SETLIST 0 3 1 ; 1
Run Code Online (Sandbox Code Playgroud)
如果构造函数以长度为60的列表开头,则t [1]的最终值为“ a”。
| 归档时间: |
|
| 查看次数: |
76 次 |
| 最近记录: |