[英]Does general Lua runtimes optimize table lookups?
像名称空间那样使用的表可以在运行之前扩展其字段,以避免为表建立索引吗? 我计划使用Lua的5.3.3编译器。 例如:
local Types = {
A = 1,
B = 2,
C = 3
};
print(Types.A);
这可以变成:
print(1);
或类似(但可能更好)的东西:
local A = 1;
print(A);
直?
不,Lua将按原样运行代码。 那就是简化编译器的代价。
查看luac
的输出:
main <2.lua:0,0> (8 instructions at 0x235bb10)
0+ params, 3 slots, 1 upvalue, 1 local, 7 constants, 0 functions
1 [1] NEWTABLE 0 0 3
2 [2] SETTABLE 0 -1 -2 ; "A" 1
3 [3] SETTABLE 0 -3 -4 ; "B" 2
4 [4] SETTABLE 0 -5 -6 ; "C" 3
5 [7] GETTABUP 1 0 -7 ; _ENV "print"
6 [7] GETTABLE 2 0 -1 ; "A"
7 [7] CALL 1 2 1
8 [7] RETURN 0 1
您可以将“ Types
设置为临时表来解析全局名称:
local Types = {
A = 1,
B = 2,
C = 3
}
do
local print = print
local _ENV = Types
print(A)
end
但是请仔细考虑为什么要这样做。 注意设置_ENV
之前需要保存print
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.