将本地化的_G变量和执行位置

第一个疑问

例如,next可以很容易地被声明为本地变量

local next = next

但是对于table.insert来说,怎么办呢?

在一个本地变量中使用带有table.insert的匿名函数实际上是可行的吗?

第二个疑问

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

真正的问题是,除了默认的_ G变量之外,我在我的项目中添加了几个

原文链接 https://stackoverflow.com/questions/70516257

点赞
stackoverflow用户2858170
stackoverflow用户2858170

但是对于table.insert,该怎么办呢?

local table = table

怎样确保_G变量被本地执行?

它仍是相同的函数值。你只是添加了一个局部引用。局部变量可以更快地查找。你必须经常调用一个函数才能真正受益于这样做。

这是一种有偏见的看法,但是大多数程序员都持有这种看法:

不要浪费时间进行过早的优化。不要为你遇到的每个全局变量创建局部引用。

2021-12-29 09:50:01
stackoverflow用户11740758
stackoverflow用户11740758

通过 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

2021-12-29 09:51:54