gpt4 book ai didi

function - 为什么要让全局 Lua 函数本地化?

转载 作者:行者123 更新时间:2023-12-04 00:45:04 25 4
gpt4 key购买 nike

一直在看一些Lua源代码,经常在文件开头看到这样的东西:

local setmetatable, getmetatable, etc.. = setmetatable, getmetatable, etc..

他们是否只是将函数本地化以让 Lua 在经常使用时更快地访问它们?

最佳答案

本地数据在堆栈上,因此它们确实可以更快地访问它们。但是,我严重怀疑函数调用时间到 setmetatable实际上对于某些程序来说是一个重要问题。

以下是对此的可能解释:

  • 防止污染地球环境。模块的现代 Lua 约定是不让它们直接将自己注册到全局表中。他们应该建立一个本地函数表并返回它们。因此,访问它们的唯一方法是使用局部变量。这迫使许多事情:
  • 一个模块不能意外覆盖另一个模块的功能。
  • 如果模块不小心这样做了,模块返回的表中的原始函数仍然可以访问。只能使用 local modname = require "modname"您是否可以保证准确且仅获得该模块所公开的内容。
  • 包含其他模块的模块不能相互干扰。您从 require 返回的表始终是模块存储的内容。
  • 阅读“local 变量访问速度更快”然后决定让所有内容 local 的人过早优化.

  • 一般来说,这是一种很好的做法。好吧,除非是因为#2。

    关于function - 为什么要让全局 Lua 函数本地化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9198677/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com