как вызвать функцию между 2 .lua - PullRequest
1 голос
/ 27 июля 2011

это то, как я вызываю функцию из menu.lua на main.lua

local menu = require("menu")

menu.drawMenu()     

но как я буду вызывать функцию из main.lua в menu.lua? Является ли это возможным ? или установить слушателя или что-то в этом роде

Ответы [ 3 ]

2 голосов
/ 28 июля 2011

Вы можете установить функцию обратного вызова, передав функцию в качестве параметра другой функции.Итак, расширив ваш пример кода:

-- 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
1 голос
/ 27 июля 2011

Если вы просто хотите предоставить действия для меню, не лучше ли использовать набор функций обратного вызова (используемых при создании элементов графического интерфейса), которые запускаются при нажатии элементов меню?

Эта ссылка может вам помочь. http://www.troubleshooters.com/codecorn/lua/luacallbacks.htm

1 голос
/ 27 июля 2011

Вы могли бы сделать это, немного поиграв с окружением, хотя это может иметь последствия и не может быть напрямую перенесено в 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
...