Calling back to a main file from a dofile in lua -
say have 2 files:
one called mainfile.lua:
function altdofile(name) dofile(debug.getinfo(1).source:sub(debug.getinfo(1).source:find(".*\\")):sub(2)..name) end altdofile("libs/caller.lua") function callback() print "called back" end docallback()
the other called caller.lua, located in libs folder:
function docallback() print "performing call back" _g["callback"]() end
the output of running first file then:
"performing call back"
then nothing more, i'm missing line!
why callback never getting executed? intended behavior, , how around it?
the fact function getting called string important, can't changed.
update: have tested further, , _g["callback"] resolve function (type()) still not called
why not use dofile?
it seems purpose of altdofile
replace running script's filename script want call thereby creating absolute path. in case path caller.lua
relative path shouldn't need change lua load file.
refactoring code this:
dofile("libs/caller.lua") function callback() print "called back" end docallback()
seems give result looking for:
$ lua mainfile.lua performing call called
just side note, altdofile
throws error if path not contain \
character. windows uses backslash path names, other operating systems linux , macos not.
in case running script on linux throws error because string.find
returns nill instead of index.
lua: mainfile.lua:2: bad argument #1 'sub' (number expected, got nil)
if need know working path of main script, why not pass command line argument:
c:\luafiles> lua mainfile.lua c:/luafiles
then in lua:
local working_path = arg[1] or '.' dofile(working_path..'/libs/caller.lua')
Comments
Post a Comment