如何在两个.lua文件之间调用函数?

这是我如何在 main.lua 中从 menu.lua 调用一个函数的方式:

local menu = require("menu")

menu.drawMenu()

但是我如果想要在 menu.lua 中从 main.lua 调用一个函数,应该怎么做呢?是否可能?或者说应该设置一个监听器什么的?

原文链接 https://stackoverflow.com/questions/6840154

点赞
stackoverflow用户513763
stackoverflow用户513763

你可以通过在环境中操作一下来实现,但这可能会产生影响,而且不能直接移植到 Lua 5.2:

-- main.lua
mainfunction = function() print"main function" end

menu = require"menu"
env=getfenv(menu.drawmenu) -- 获取原始环境
env=setmetatable(env,{__index=_G}) -- 查找所有在本环境中不存在的变量在全局表 _G 中
menu.drawmenu()

-- menu.lua
menu={}
menu.drawmenu=function()
    print'drew menu'
    mainfunction()
end
return menu
2011-07-27 08:05:01
stackoverflow用户438753
stackoverflow用户438753

如果您只是想为菜单提供操作,那么使用一组回调函数(在构建 GUI 元素时使用)来在点击菜单项时触发是否更好呢?

这个链接可能会对您有所帮助。

http://www.troubleshooters.com/codecorn/lua/luacallbacks.htm

2011-07-27 10:26:31
stackoverflow用户686008
stackoverflow用户686008

你可以将一个函数作为参数传递给另一个函数来设置回调函数。因此,在你的示例代码的基础上进行扩展:

-- main.lua
local menu = require("menu")
function drawMain()
  print("main")
end function
menu.drawMenu(drawMain)

-- menu.lua
menu = {}
menu.drawMenu = function(callback)
    print("menu")
    callback()
end
return menu
2011-07-28 12:19:05