6

任何很棒的 wm 模块都是从将标准变量重新定义为本地开始的。类似的东西

local table = table
local string = string
local tostring = tostring

它有什么作用?删除此行后,所有代码仍然可以正常工作。

4

2 回答 2

5

这纯粹是一个优化的事情。局部变量比全局变量读/写更快。这部分是因为全局变量是哈希表查找(例如foo=> _G["foo"]),而局部变量是 VM 寄存器查找。因此,对于将要使用全局变量的模块通过局部变量对其进行别名的情况并不少见。

对于您的代码,除非您知道某些东西会被称为大量并且会成为瓶颈,否则我不会为这种技术而烦恼。Lua 不是 C。你在交易性能是为了简洁明了。在您知道必须这样做之前,不要将其交易回来。

于 2014-03-31T21:29:38.950 回答
1

“它做什么”已经回答了。

对于“为什么这样做”:回到真棒支持的 lua 5.2(没有弃用的功能)之前,所有模块都使用 lua 的 module() 函数来设置自己。这意味着来自全局变量的值变得不可访问,而这种“局部技巧”实际上是必要的。

于 2014-04-01T19:00:20.473 回答