我有一个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中完成的。
答案 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