Lua 我可以使用_G避免两次查找吗?
我已经了解到,如果使用一些函数,如Lua 我可以使用_G避免两次查找吗?,lua,scope,Lua,Scope,我已经了解到,如果使用一些函数,如table.insert,lua将首先尝试在局部范围内查找变量,然后在全局范围内查找变量。我可以使用\u G.table.insert来绕过本地查找吗 这是luac-l的输出: 没有 main <main.lua:0,0> (7 instructions at 0x55581ae50c60) 0+ params, 4 slots, 1 upvalue, 1 local, 3 constants, 0 functions 1 [1] NEW
table.insert
,lua将首先尝试在局部范围内查找变量,然后在全局范围内查找变量。我可以使用\u G.table.insert来绕过本地查找吗
这是luac-l的输出:
没有
main <main.lua:0,0> (7 instructions at 0x55581ae50c60)
0+ params, 4 slots, 1 upvalue, 1 local, 3 constants, 0 functions
1 [1] NEWTABLE 0 0 0
2 [2] GETTABUP 1 0 -1 ; _ENV "table"
3 [2] GETTABLE 1 1 -2 ; "insert"
4 [2] MOVE 2 0
5 [2] LOADK 3 -3 ; 5
6 [2] CALL 1 3 1
7 [2] RETURN 0 1
main(0x55581ae50c60处的7条指令)
0+参数,4个插槽,1个上限值,1个本地值,3个常量,0个函数
1[1]新表0
2[2]gettabup10-1_环境“表格”
3[2]可获取1-2;“插入”
4[2]移动2 0
5[2]荷载K 3-3;5.
6[2]致电1 3 1
7[2]返回0 1
与
main <main.lua:0,0> (8 instructions at 0x5562b3d6dc60)
0+ params, 4 slots, 1 upvalue, 1 local, 4 constants, 0 functions
1 [1] NEWTABLE 0 0 0
2 [2] GETTABUP 1 0 -1 ; _ENV "_G"
3 [2] GETTABLE 1 1 -2 ; "table"
4 [2] GETTABLE 1 1 -3 ; "insert"
5 [2] MOVE 2 0
6 [2] LOADK 3 -4 ; 5
7 [2] CALL 1 3 1
8 [2] RETURN 0 1
main(0x5562b3d6dc60处的8条指令)
0+参数,4个插槽,1个上限值,1个本地,4个常量,0个函数
1[1]新表0
2[2]gettabup10-1_环境「
3[2]可获取1-2;“表格”
4[2]可获取的1 1-3;“插入”
5[2]移动2 0
6[2]荷载K 3-4;5.
7[2]致电1 3 1
8[2]返回0 1
我不确定这些数字是什么意思。\u G
不是保留的,从编译器输出中可以看出,使用它可能会更糟糕。我认为用\u G
来做会更慢。\u G
不是保留的,从编译器输出中可以看出,用它可能会更糟。我认为使用\u G
进行测试更慢。检查测试脚本上luac-l
的输出。@lhf它告诉我它从\u ENV
获取表,但它也表示对于\u G
。我读到它在调用全局变量时会进行更多的查找,所以我认为如果保留了\u G
,那么它只会进行一次查找。是否正确?\u G
未保留。你想达到什么目的?什么都没有,那就别管了。我是基于2个查找的,他们说有2个查找是不好的。我还读到,\u G
是由SO上的语言保留的。另请参见。检查测试脚本上luac-l
的输出。@lhf它告诉我它从\u ENV
获取表
,但它也表示对于\u G
。我读到它在调用全局变量时会进行更多的查找,所以我认为如果保留了\u G
,那么它只会进行一次查找。是否正确?\u G
未保留。你想达到什么目的?什么都没有,那就别管了。我是基于2个查找的,他们说有2个查找是不好的。我还读到,SO上的语言保留了\u G
。另请参阅。