@@ -90,19 +90,20 @@ impl Actor {
9090 let lua = self . lua . clone ( ) ;
9191 _handler. lock ( ) . unwrap ( ) . post ( RawFunc :: new ( move || {
9292 let lua = lua. clone ( ) ;
93- let _ = Self :: _set_global ( & lua, key, value. clone ( ) ) ;
93+ let _ = Self :: set_global_raw ( & lua. lock ( ) . unwrap ( ) , key, value. clone ( ) ) ;
9494 } ) ) ;
9595 Ok ( ( ) )
9696 }
97- None => Self :: _set_global ( & self . lua . clone ( ) , key, value) ,
97+ None => Self :: set_global_raw ( & self . lua . lock ( ) . unwrap ( ) , key, value) ,
9898 }
9999 }
100100 #[ inline]
101- fn _set_global ( lua : & Arc < Mutex < Lua > > , key : & str , value : LuaMessage ) -> Result < ( ) , Error > {
102- let vm = lua. lock ( ) . unwrap ( ) ;
103- let globals = vm. globals ( ) ;
104- globals. set ( key, value) ?;
105- Ok ( ( ) )
101+ pub fn set_global_raw < ' lua , K : ToLua < ' lua > , V : ToLua < ' lua > > (
102+ lua : & ' lua Lua ,
103+ key : K ,
104+ value : V ,
105+ ) -> Result < ( ) , Error > {
106+ lua. globals ( ) . set :: < _ , V > ( key, value)
106107 }
107108
108109 pub fn get_global ( & self , key : & ' static str ) -> Result < LuaMessage , Error > {
@@ -150,6 +151,7 @@ impl Actor {
150151 #[ inline]
151152 pub fn def_fn_with_name < ' lua , ' callback , F , A , R > (
152153 lua : & ' lua Lua ,
154+ table : Table < ' lua > ,
153155 func : F ,
154156 key : & str ,
155157 ) -> Result < Function < ' lua > , Error >
@@ -159,8 +161,8 @@ impl Actor {
159161 F : ' static + Send + Fn ( & ' callback Lua , A ) -> Result < R , Error > ,
160162 {
161163 let def = Self :: def_fn ( lua, func) ?;
162- lua . globals ( ) . set ( key, def) ?;
163- Self :: get_global_function ( lua , key)
164+ table . set ( key, def) ?;
165+ table . get ( key)
164166 }
165167 pub fn def_fn_with_name_nowait < ' callback , F , A , R > (
166168 & self ,
@@ -177,12 +179,12 @@ impl Actor {
177179 let lua = self . lua . clone ( ) ;
178180 _handler. lock ( ) . unwrap ( ) . post ( RawFunc :: new ( move || {
179181 let lua = lua. lock ( ) . unwrap ( ) ;
180- let _ = Self :: def_fn_with_name ( & lua, func. clone ( ) , key) ;
182+ let _ = Self :: def_fn_with_name ( & lua, lua . globals ( ) , func. clone ( ) , key) ;
181183 } ) ) ;
182184 }
183185 None => {
184186 let lua = self . lua . lock ( ) . unwrap ( ) ;
185- Self :: def_fn_with_name ( & lua, func. clone ( ) , key) ?;
187+ Self :: def_fn_with_name ( & lua, lua . globals ( ) , func. clone ( ) , key) ?;
186188 }
187189 }
188190
@@ -375,16 +377,13 @@ fn test_actor_new() {
375377 }
376378
377379 {
378- let vm = act. lua ( ) ;
379- let vm = vm. lock ( ) . unwrap ( ) ;
380- Actor :: def_fn_with_name ( & vm, |_, ( list1, list2) : ( Vec < String > , Vec < String > ) | {
380+ act. def_fn_with_name_nowait ( |_, ( list1, list2) : ( Vec < String > , Vec < String > ) | {
381381 // This function just checks whether two string lists are equal, and in an inefficient way.
382382 // Lua callbacks return `rlua::Result`, an Ok value is a normal return, and an Err return
383383 // turns into a Lua 'error'. Again, any type that is convertible to lua may be returned.
384384 Ok ( list1 == list2)
385385 } , "check_equal" ) . ok ( ) . unwrap ( ) ;
386- Actor :: def_fn_with_name (
387- & vm,
386+ act. def_fn_with_name_nowait (
388387 |_, strings : Variadic < String > | {
389388 // (This is quadratic!, it's just an example!)
390389 Ok ( strings. iter ( ) . fold ( "" . to_owned ( ) , |a, b| a + b) )
@@ -393,20 +392,23 @@ fn test_actor_new() {
393392 ) . ok ( )
394393 . unwrap ( ) ;
395394 assert_eq ! (
396- vm. eval:: <bool >( r#"check_equal({"a", "b", "c"}, {"a", "b", "c"})"# , None )
397- . ok( )
398- . unwrap( ) ,
395+ Option :: <bool >:: from(
396+ act. eval( r#"check_equal({"a", "b", "c"}, {"a", "b", "c"})"# , None )
397+ . ok( )
398+ . unwrap( )
399+ ) . unwrap( ) ,
399400 true
400401 ) ;
401402 assert_eq ! (
402- vm. eval:: <bool >( r#"check_equal({"a", "b", "c"}, {"d", "e", "f"})"# , None )
403- . ok( )
404- . unwrap( ) ,
403+ Option :: <bool >:: from(
404+ act. eval( r#"check_equal({"a", "b", "c"}, {"d", "e", "f"})"# , None )
405+ . ok( )
406+ . unwrap( )
407+ ) . unwrap( ) ,
405408 false
406409 ) ;
407410 assert_eq ! (
408- vm. eval:: <String >( r#"join("a", "b", "c")"# , None )
409- . ok( )
411+ Option :: <String >:: from( act. eval( r#"join("a", "b", "c")"# , None ) . ok( ) . unwrap( ) )
410412 . unwrap( ) ,
411413 "abc"
412414 ) ;
0 commit comments