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

时间:2018-09-26 14:27:31

标签: lua

以下代码段

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

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

foo()

产生以下输出

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]: ?

如果我从local声明中删除修饰符bar,则它按预期方式工作,输出

inside foo
inside bar

如何在bar内调用foo并将两者都保持为local

2 个答案:

答案 0 :(得分:4)

您需要在bar之前定义foo

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

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

foo()

在您的示例中,当您位于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()

在此示例中,如果您想证明bar是局部变量,则可以在末尾添加以下代码:

if _G.bar ~= nil then
    print("bar is a global variable")
else
    print("bar is a local variable")
end

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

答案 1 :(得分:1)

事实上:

local function foo () end

等同于

local foo  
foo = function() end  

在Lua中,函数是一等值。因此,在定义它之前不可用。