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

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

情况如下:

local function submenu(settings)
    -- 获取用户输入并相应地更改设置{} 表键
    main_menu(settings)
end

local function main_menu(settings)
    -- 展示选择并获取用户输入
    submenu(settings)
end

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

main_menu(settings)

问题是,每当(据我所知)一个函数调用另一个函数在脚本后面定义时,我会得到“尝试调用 nil”的错误。所以,如果像上面的例子一样,我先定义 submenu(),然后是 main_menu()main_menu() 调用 submenu() 没有问题,但 submenu() 无法调用 main_menu()

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

点赞
用户909233
用户909233

你可以使用前向声明创建一个local function,像这样:

local main_menu

local function submenu(settings)
    -- 获取用户输入并相应地更改settings{}表键
    main_menu(settings)
end

main_menu = function(settings)
    -- 提供选择并获取用户输入
    submenu(settings)
end

也可以通过删除local关键字来进行全局函数声明:

function submenu(settings)
    -- 获取用户输入并相应地更改settings{}表键
    main_menu(settings)
end

function main_menu(settings)
    -- 提供选择并获取用户输入
    submenu(settings)
end
2012-12-26 01:27:53