处理函数指标 (function pointer).
语法:
mixed apply( mixed f, mixed *args )混合 apply( 混合 f, 混合 *args )
用法:
如果 f 是一个函式, 就会呼叫 f 并用阵列 args 当作 f的参数 (argument).
例:apply( f, ({ 1, 2, 3 }) ); 与evaluate( f, 1, 2, 3 ); 是相同的.
翻译:Spock @ FF 96.Oct.14. (printed 3/16/95)
变更一个函式指标 (function pointer) 所指向的函式.
语法:
function bind( function f, object ob )函式指标 bind( 函式 f, 物件 ob )
用法:
传回一个指向 f 的函式指标, 但是指标属於物件 ob ,而不是创造 f 的物件. 如果 f 的创造者被摧毁、f是一个超越函式 (emulated function, 即 efun) 的指标、或是指标指向的超越函式会对 this_object 做一些处理时, bind() 就很有用.
范例:
void make_living(object ob) {function f;
f = bind( (: enable_commands :), ob );
evaluate(f);
以上例子的作用, 相当於物件 ob 自己处理enable_commands() 的超越函式. 注意 !! 这个例子会引发一些系统安全上的风险, 因为 bind() 可以让你强迫其他的物件执行一段程式码. 为了要防止 bind() 被滥用,有一个主宰物件函式 (master apply) valid_bind() 可以用来决定 bind() 的执行与否. 呼叫 bind() 时, 如果valid_bind() 传回 1 即可执行, 传回 0 就无法执行.
翻译:Spock @ FF 96.Oct.16. (printed 3/16/95)
执行一个函式指标 (function pointer)
语法:
mixed evaluate(mixed f, ...)混合 evaluate( 混合 f, ... )
用法:
如果 f 是一个函式, 就会以第二个参数以後 (即上面 ...的地方) 为 f 使用的参数呼叫 f. 而 f 如果有传回值,evaluate( f, ... ) 就相当於直接呼叫 f 的结果.
翻译:Spock @ FF 97.Feb.12. (printed 3/16/95)
判断指定的变数是否为一个函式指标
说明:
如果 arg 是一个函式指标则传回非零值 (nonzero), 如果不是则传回 0.函式指标是一种「函式」(function) 型态的指标变数.以下是一个范例:
f = (:obj, func :);
传回的值指示出函式指标的型态, 而这些传回值被定义在驱动程式中的 "include/function.h" 档案中.
function pointer typevalue
call_otherFP_CALL_OTHER lfunFP_LOCAL efunFP_EFUN simul_efunFP_SIMUL functionalFP_FUNCTIONAL
另外在某些情形下, 会加上以下的值:
(有参数)FP_HAS_ARGUMENTS (创造函式的物件被摧毁)FP_OWNER_DESTED (函式无法连结)FP_NOT_BINDABLE最後三个值为位元值 (bit value), 可以用位元测试.FP_MASK 可以忽略这些位元值, 测试基本的函式指标型态,
范例:
测试一个函式指标变数是否为超越函式指标:
if ((functionp(f) & FP_MASK) == FP_EFUN) ...测试其是否有参数:
if (functionp(f) & FP_HAS_ARGUMENTS) ..