gpt4 book ai didi

lua - 我应该在lua中将函数中的变量定义为局部变量吗

转载 作者:行者123 更新时间:2023-12-02 06:33:51 25 4
gpt4 key购买 nike

例如

function foo1()
local i=10 --or just i=10
end

变量i 在函数外是不可见的。所以我应该明确地将它声明为 local 吗?或者它已经是一个本地变量。

最佳答案

在 Lua 中,每个未显式声明为 local 的变量(参数除外,因为它们是由 VM 隐式创建的上值局部变量)都是全局变量,因此这样做:

function foo1()
i=10
end

foo1()
print(i) -- prints "10"

完全一样:

_G["foo1"] = function()
_G["i"]=10
end

foo1()
print(i) -- prints "10"

这是不好的。所以你应该将其声明为:

local function foo1()
local i=10
end

foo1()
print(i) -- prints "nil", so it's local

编辑:但要注意闭包的升值。例如这个:

local function foo()
local i=10
local function bar()
i=5
end
print(i) -- 10
bar()
print(i) -- 5
end

print(i) -- nil
foo()
print(i) -- nil

编辑 2:此外,您应该考虑将函数设为本地,这样它们就不会使全局表膨胀。只需将它们声明为 local function ......

tl;dr:除非您确实有充分的理由不这样做(=从不),否则只需将所有内容都本地化,因为这样您就不会意外地冲突名称。 lua 默认情况下使所有内容全局化是一个历史决定,现在被认为是不好的做法。我喜欢 moonscript 的原因之一是因为它将所有内容默认为本地(而且语法对我来说更好)。

关于lua - 我应该在lua中将函数中的变量定义为局部变量吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24729599/

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