以下片段
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)
如果我local从bar声明中删除修饰符,那么它会按预期工作,输出
inside foo
inside bar
Run Code Online (Sandbox Code Playgroud)
我怎样才能bar在内部foo保持两者为local?
您需要bar在foo.
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全局变量表中的键。