使用_G可以避免2次查找吗?

我读过,如果使用一些函数(比如 table.insert),Lua会首先在局部范围内查找变量,然后在全局范围内查找。那我是否可以使用 _G.table.insert 来绕过局部查找呢?

以下是 luac -l 的输出:

没有使用 _G:

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

使用 _G:

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

我不确定这些数字代表什么。

点赞
用户10853121
用户10853121

_G 没有被保留,从编译器输出中可以看出它甚至更糟糕。我认为用 _G 做这件事更慢。

2020-06-12 22:31:12