使 _G 变量成为局部变量并执行位置

Making local the _G variables & execute location

第一个疑问

例如,next可以很容易地表示为本地

local next = next

但是 table.insert 会怎样呢?

在本地变量中使用 table.insert 创建一个匿名函数真的可行吗?

第二个疑问

是否可以知道函数从哪里执行的?这让我们回到我的第一个疑问,我如何确保 _G 变量在本地执行

真的要问了,因为除了默认的 _G 变量,我在我的项目中添加了几个

But how would it be with table.insert for example?

local table = table

how can i ensure a _G variable is being executed locally

还是一样的函数值。您刚刚添加了对它的本地引用。可以更快地查找局部变量。您必须经常调用一个函数才能真正从中受益。

这是自以为是,但大多数程序员都认同这种观点:

不要将时间浪费在过早的优化上。不要为你遇到的每个全局创建本地引用。

使用 load() 你可以给 Lua 代码一个自己的环境。
通常(没有自己的环境)使用 _G (5.1) 或 _ENV(自 5.3 起)。
你可以玩的例子...

> _VERSION
Lua 5.4
> load('do local tab, concat, insert = {}, concat, insert insert(tab, "Hello World!") return concat(tab) end', 'own_env', 't', {concat = table.concat, insert = table.insert})()
Hello World!
> load('do local tab, concat, insert = {}, concat, insert insert(tab, "Hello World!") return concat(tab) end', 'own_env', 't')()
[string "own_env"]:1: local 'insert' is not callable (a nil value)
stack traceback:
        [string "own_env"]:1: in main chunk
        (...tail calls...)
        [C]: in ?

来源:https://www.lua.org/manual/5.4/manual.html#pdf-load