[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: Calling function by string name
 
- From: "Nick Trout" <ntrout@...>
 
- Date: Tue, 28 Jan 2003 11:32:54 -0800
 
> On Behalf Of Luiz Henrique de Figueiredo
> Sent: January 28, 2003 10:40 AM
> To: Multiple recipients of list
> Subject: Re: Calling function by string name
> 
> >     call( "ent_" .. name, args) -- ERROR
> 
> Try
> 
>      call( getglobal("ent_" .. name), args)
> 
> But perhaps it's simpler to do
> 
>      ent = {}
> 
>      function ent.wall() ... end
>      function ent.door() ... end
> 
>      function entity_spawn(name)
> 	ent[name]()
>      end
> 
> --lhf
The advantage of doing it this was as well is you won't create a string
which has to be collected later.
Lua script:
name = "wall"
call(globals()["ent_" .. name])
luac generates the follow output:
main <0:@/tmp/wlzQPuia> (11 instructions/44 bytes at 0x8052af0)
0 params, 4 stacks, 0 locals, 5 strings, 0 numbers, 0 functions, 4 lines
     1	[2]	PUSHSTRING 	1	; "wall"
     2	[2]	SETGLOBAL  	0	; name
     3	[3]	GETGLOBAL  	2	; call
     4	[3]	GETGLOBAL  	3	; globals
     5	[3]	CALL       	1 1
     6	[3]	PUSHSTRING 	4	; "ent_"
     7	[3]	GETGLOBAL  	0	; name
     8	[3]	CONCAT     	2                ** New string **
     9	[3]	GETTABLE
    10	[3]	CALL       	0 0
    11	[3]	END
(from http://doris.sourceforge.net/lua/weblua.php).