User Tools

Site Tools


lua:loadfunction

To be completed, here are some notes:

There is a way to do this using loadfunction:

-- mprog 31404
function a_function( arg1, arg2 )
    say("Arg 1: "..arg1)
    say("Arg 2: "..arg2)
    return 3 + 5
end
 
 
-- mprog 31405
target_mob = getmobworld(31424)[1]
target_mob:loadprog(31404)
target_mob:loadfunction( function()
    a_function( "test1", "test2" )
end)
 
 
-- alternate mprog 31405
target_mob = getmobworld(31424)[1]
target_mob:loadfunction( function ()
    loadprog(31404) 
    -- alternately: target_mob:loadprog(31404) 
    -- alternately : mob:loadprog(31404)  -- 'mob' in this case would be target_mob because this function runs in target_mob's env
    a_function( "test1", "test2" )
end)
 
-- mprog 31405 with return value
-- note, 'mob' is not a function variable, but a global variable to the
environment
-- uses closure magic to move values between script envs
local result
target_mob = getmobworld(31424)[1]
target_mob:loadfunction( function ()
    loadprog(31404) 
    result=a_function( "test1", "test2" )
end)

Not as pretty as something like target_mob:loadprog( 31404, “test1”, “test2” ), but there is no straightforward way to implement args to loadprog directly. For instance, if I used the syntax above, by what name would you refer to those parameters in the 31404 script?

So loadfunction is the way to do tricky stuff like this, for better or worse. I agree, it's often nice to have all the code in one place. loadfunction can't directly return a value, but you can use other tricks to get the job done:

-- mprog 31405 with return value
-- uses closure magic to move values between script envs
local result
target_mob = getmobworld(31424)[1]
target_mob:loadfunction( function ()
    loadprog(31404) 
    result=a_function( "test1", "test2" )
end)
lua/loadfunction.txt · Last modified: 2014/07/18 15:42 by vodur