在另一个本地函数中调用本地函数

Gab*_*iel 2 lua

以下片段

local function foo ()
    print('inside foo')
    bar()
end

local function bar ()
    print('inside bar')
end

foo()
Run Code Online (Sandbox Code Playgroud)

结果在以下输出

inside foo
lua: teste.lua:3: attempt to call global 'bar' (a nil value)
stack traceback:
        teste.lua:3: in function 'foo'
        teste.lua:10: in main chunk
        [C]: ?
Run Code Online (Sandbox Code Playgroud)

如果我localbar声明中删除修饰符,那么它会按预期工作,输出

inside foo
inside bar
Run Code Online (Sandbox Code Playgroud)

我怎样才能bar在内部foo保持两者为local

Jac*_*lor 6

您需要barfoo.

local function bar ()
    print('inside bar')
end

local function foo ()
    print('inside foo')
    bar()
end

foo()
Run Code Online (Sandbox Code Playgroud)

在您的示例中,当您在foo函数内部时,就 Lua 而言bar尚不存在。这意味着它默认为一个值为 的全局变量nil,这就是为什么您会收到错误“尝试调用全局 'bar'(一个 nil 值)”的原因。

如果你想foo之前定义bar并保留它们作为局部变量,则需要先声明 bar 变量。

local bar

local function foo ()
    print('inside foo')
    bar()
end

function bar ()
    print('inside bar')
end

foo()
Run Code Online (Sandbox Code Playgroud)

在这个例子中,如果你想向自己证明bar是一个局部变量,你可以在最后添加以下代码:

if _G.bar ~= nil then
    print("bar is a global variable")
else
    print("bar is a local variable")
end
Run Code Online (Sandbox Code Playgroud)

这将检查“bar”是否是_G全局变量表中的键。