使用像命名空间一样的表可以在运行之前扩展它们的字段,以避免索引表吗?我计划使用Lua的5.3.3编译器。例如:
local Types = {
A = 1,
B = 2,
C = 3
};
print(Types.A);
这会变成:
print(1);
或类似的东西(但可能更好):
local A = 1;
print(A);
直接?
答案 0 :(得分:3)
不,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
答案 1 :(得分:1)
您可以将2
设置为临时表以解析全局名称:
int dropshipItems = orderItems
.Where(x => !string.IsNullOrEmpty(x.Dropship))
.GroupBy(x => x.Sku)
.Count();
但要思考为什么你想要这个。请注意,在设置Types
之前需要保存local Types = {
A = 1,
B = 2,
C = 3
}
do
local print = print
local _ENV = Types
print(A)
end
。