Dynamic Calls

These routines let you call Phix procedures and functions using a unique integer known as a routine_id, rather than by specifying the name of the routine.

Since 0.8.3, a plain xxx, not followed by '(', is equivalent to/treated by the compiler as routine_id("xxx"), and in a similar vein, after integer rid = xxx the compiler will treat rid(a,b,c) as call_func/proc[depending on context](rid,{a,b,c}). In other words routine(id)s became first class citizens in 0.8.3, and while much of what follows is strictly speaking OTT, it is probably still helpful to understand the basic mechanisms, which are all still at work, and occasionally can be more flexible, for instance call_func(rid,args) might cope with 3, 4, or 5 parameters in args, whereas rid(a,b,c) is quite obviously 3 and only 3 parameters, full stop. (OK, not quite full stop, should you be looking for the equivalent of (say) JavaScript’s "..." spread operator, then it is call_func/proc).

routine_id (deprecated, as above) get a unique identifying number for a Phix routine
call_proc call a Phix procedure using a routine id
call_func call a Phix function using a routine id