gpt4 book ai didi

lua - 在 Lua 中,使用和不使用 "local"关键字声明的本地函数之间有区别吗?

转载 作者:行者123 更新时间:2023-12-04 22:55:09 24 4
gpt4 key购买 nike

前言:据我所知,网站上的文档并没有真正说明这一点,而且我还没有找到其他人甚至问过这个问题,所以我很确定这两种形式是相同的,但我想要知道是否有人确定。

鉴于此 Lua 代码:

function f()
function a() ... end
local function b() ... end
...
end
a() 之间有什么功能上的区别吗?和 b() ?我说的是性能、访问权限、注意事项等等。最后,它们在运行时是否具有完全相同的底层表示?

我怀疑没有任何区别,但我不确定,这让我很烦恼。我知道 a()范围为封闭函数 f() ,但我不确定这是否真的使它成为一个局部变量,就事物在幕后的运作方式而言。与 b() ,我可以肯定。

我们从官方文档中知道我对 b() 的定义以上是这个的语法糖:
    local b
b = function() ... end

我很想相信,即使没有 local我定义中的关键字, a() 的最终脱糖定义也将完全遵循该格式,包括 local a部分。

我只是觉得我不能假设这一点。

最佳答案

function a() end在您的代码块中分配全局 a当函数运行时*,而 b仍然是函数的局部。

也许这个代码段会更好地说明事情:

function f()
function a() end
local function b() end
end
print(a, b) -- nil, nil
f()
print(a, b) -- function: 0xdeadbeef, nil

所以为了避免污染全局环境,还是应该使用 local函数内部。

* 除非您声明 a位于 f 以上的其他范围内的本地, 在这种情况下 a将保持其范围。

关于lua - 在 Lua 中,使用和不使用 "local"关键字声明的本地函数之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51051431/

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