从其他函数中引用早期函数和后续函数?

时间:2012-12-26 01:09:11

标签: lua function-declaration

我有一个Lua脚本,它提供了一个交互式文本菜单,用于在实际完成工作之前配置脚本。有一个main_menu()函数,它有用户可以选择的选项,每个选项都调用一个不同的submenu()函数。这些不同的submenu()函数中的每一个都执行它们的操作,然后它们返回到(它们调用)main_menu()函数。最后,每个函数都有一个传递给它的settings参数,这是一个设置表。

事情看起来像这样:

local function submenu(settings)
    -- Get user input & change a settings{} table key accordingly
    main_menu(settings)
end

local function main_menu(settings)
    -- Present choices & get user input
    submenu(settings)
end

local settings={}
settings["foo"] = "bar"

main_menu(settings)

问题是,每当(据我所知)函数调用稍后在脚本中定义的另一个函数时,我会收到attempt to call nil个错误。因此,如果在上面的示例中,我定义submenu()然后 main_menu()main_menu()调用submenu()没有问题,但是{{1 }}无法调用submenu()

FWIW,这是在Minecraft的ComputerCraft mod中完成的。

1 个答案:

答案 0 :(得分:2)

您可以使用这样的前向声明执行local function

local main_menu

local function submenu(settings)
    -- Get user input & change a settings{} table key accordingly
    main_menu(settings)
end

main_menu = function(settings)
    -- Present choices & get user input
    submenu(settings)
end

或删除local个关键字来执行全局函数声明:

function submenu(settings)
    -- Get user input & change a settings{} table key accordingly
    main_menu(settings)
end

function main_menu(settings)
    -- Present choices & get user input
    submenu(settings)
end