【问题标题】:how to call function between 2 .lua如何在 2 .lua 之间调用函数
【发布时间】:2011-10-13 23:39:53
【问题描述】:

这就是我在 main.lua 中从 menu.lua 调用函数的方式

local menu = require("menu")

menu.drawMenu()     

但是我将如何在 menu.lua 中调用 main.lua 中的函数?可能吗 ?或设置一个监听器或类似的东西

【问题讨论】:

    标签: function lua call coronasdk


    【解决方案1】:

    您可以通过将函数作为参数传递给另一个函数来设置回调函数。因此,扩展您的示例代码:

    -- 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
    

    【讨论】:

      【解决方案2】:

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

      此链接可能会对您有所帮助。 http://www.troubleshooters.com/codecorn/lua/luacallbacks.htm

      【讨论】:

      • 对不起,我是编程新手,所以基本上这个回调在我的 main.lua 中,我调用 menu.binary_op(5, 3, plus),它会调用另一个本地函数,并返回一些东西给我正确的?我想做的是在我的 menu.lua 中,它会绘制一个按钮,当用户单击它时,它会触发一个功能,我如何让我的 main.lua 知道 menu.lua 内的功能已被触发?
      • 有几种方法可以做到这一点。最简单的可能是,您在主程序中定义希望菜单触发的功能,然后将它们作为参数传递给菜单功能。
      • 在我的回答中,我发布了将函数作为参数传递给其他函数的示例代码。
      • 是的,当 main.lua 在 menu.lua 调用 init() 函数时,我通过将函数从 main.lua 传递给 menu.lua 来完成。谢谢!! =)
      【解决方案3】:

      您可以通过稍微调整环境来做到这一点,尽管这可能会产生影响并且不能直接移植到 Lua 5.2:

      -- main.lua
      mainfunction = function() print"main function" end
      
      menu = require"menu"
      env=getfenv(menu.drawmenu) -- get the original environment
      env=setmetatable(env,{__index=_G}) -- look up all variables not existing in that
                                         -- environment in the global table _G
      menu.drawmenu()
      
      -- menu.lua
      menu={}
      menu.drawmenu=function()
          print'drew menu'
          mainfunction()
      end
      return menu
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-24
        • 2018-09-11
        • 2015-07-14
        • 2013-12-22
        • 2011-02-01
        • 2022-01-16
        • 1970-01-01
        • 2015-03-08
        相关资源
        最近更新 更多