当前位置 : 主页 > 网络编程 > lua >

在Lua中,使用和不使用“local”关键字声明的本地函数之间是否存在差异?

来源:互联网 收集:自由互联 发布时间:2021-06-23
前言:据我所知,网站上的文档并没有真正说明这一点,我甚至没有找到其他人提问,所以我很确定这两种形式是相同的,但我想要知道是否有人确切知道. 鉴于此Lua代码: function f() functio
前言:据我所知,网站上的文档并没有真正说明这一点,我甚至没有找到其他人提问,所以我很确定这两种形式是相同的,但我想要知道是否有人确切知道.

鉴于此Lua代码:

function f()
    function a() ... end
    local function b() ... end
    ...
end

a()和b()之间是否有任何功能差异?我说的是性能,访问,警告,任何事情.最后,他们在运行时是否都具有完全相同的底层表示?

我怀疑没有任何区别,但我不确定,这让我感到困扰.我知道a()的作用域是封闭函数f(),但是我不确定它是否真正使它成为局部变量的根本功能.用b(),我可以肯定.

我们从官方文档中了解到,我对上面b()的定义是语法糖:

local b
    b = function() ... end

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

我觉得我不能假设这一点.

函数a()结束在代码块中,当函数运行时指定全局a *,而b保持函数的本地.

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

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

因此,为避免污染全局环境,您仍应使用函数内部的本地.

*除非你在f之上的其他范围内声明了本地,否则a将保持其范围.

网友评论