使 _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 ?
第一个疑问
例如,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 ?