User Tools

Site Tools


lua:loadfunction

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
lua:loadfunction [2014/07/18 15:40] – created vodurlua:loadfunction [2014/07/18 15:42] (current) vodur
Line 1: Line 1:
 To be completed, here are some notes: To be completed, here are some notes:
  
-[code] +There is a way to do this using loadfunction: 
 +  
 +<code lua>
 -- mprog 31404 -- mprog 31404
- 
 function a_function( arg1, arg2 ) function a_function( arg1, arg2 )
- +    say("Arg 1: "..arg1) 
-  say("Arg 1: "..arg1) +    say("Arg 2: "..arg2) 
- +    return 3 + 5
-  say("Arg 2: "..arg2) +
- +
-  return 3 + 5 +
 end end
 +  
 + 
 -- mprog 31405 -- mprog 31405
- 
 target_mob = getmobworld(31424)[1] target_mob = getmobworld(31424)[1]
- 
 target_mob:loadprog(31404) target_mob:loadprog(31404)
- 
 target_mob:loadfunction( function() target_mob:loadfunction( function()
- +    a_function( "test1", "test2" )
-  a_function( "test1", "test2" ) +
 end) end)
 +  
 + 
 -- alternate mprog 31405 -- alternate mprog 31405
- 
 target_mob = getmobworld(31424)[1] target_mob = getmobworld(31424)[1]
- 
 target_mob:loadfunction( function () target_mob:loadfunction( function ()
- +    loadprog(31404)  
-  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 
-  -- alternately: target_mob:loadprog(31404) +    a_function( "test1", "test2" )
- +
-  -- 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) end)
 + 
 -- mprog 31405 with return value -- mprog 31405 with return value
- 
 -- note, 'mob' is not a function variable, but a global variable to the -- note, 'mob' is not a function variable, but a global variable to the
- 
 environment environment
- 
 -- uses closure magic to move values between script envs -- uses closure magic to move values between script envs
- 
 local result local result
- 
 target_mob = getmobworld(31424)[1] target_mob = getmobworld(31424)[1]
- 
 target_mob:loadfunction( function () target_mob:loadfunction( function ()
- +    loadprog(31404)  
-  loadprog(31404) +    result=a_function( "test1", "test2" )
- +
-  result=a_function( "test1", "test2" ) +
 end) end)
- +</code> 
-[/code] + 
 Not as pretty as something like target_mob:loadprog( 31404, "test1", "test2" ), Not as pretty as something like target_mob:loadprog( 31404, "test1", "test2" ),
- 
 but there is no straightforward way to implement args to loadprog directly. 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 For instance, if I used the syntax above, by what name would you
- 
 refer to those parameters in the 31404 script? refer to those parameters in the 31404 script?
 +  
 + 
 So loadfunction is the way to do tricky stuff like this, for better or worse. 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. 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 loadfunction can't directly return a value, but you can use other tricks to
- 
 get the job done: get the job done:
- +  
-[code lua+<code lua>
 -- mprog 31405 with return value -- mprog 31405 with return value
- 
 -- uses closure magic to move values between script envs -- uses closure magic to move values between script envs
- 
 local result local result
- 
 target_mob = getmobworld(31424)[1] target_mob = getmobworld(31424)[1]
- 
 target_mob:loadfunction( function () target_mob:loadfunction( function ()
- +    loadprog(31404)  
-  loadprog(31404) +    result=a_function( "test1", "test2" )
- +
-  result=a_function( "test1", "test2" ) +
 end) end)
- +</code>
-[/code]+
  
lua/loadfunction.1405698024.txt.gz · Last modified: 2014/07/18 15:40 by vodur