0

我有一个 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()submenu()main_menu()

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

4

1 回答 1

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
于 2012-12-26T01:27:53.423 回答