Skip to content

functionp

名称

functionp() - 判断给定变量是否是函数指针,如果是再判断为何种型态

语法

int functionp( mixed arg );

描述

如果 `arg` 是函数指针返回非零针,否则返回0。函数指针是函数类型的变量,如:

f = (: func, args... :);

返回值为驱动程序 "include/function.h" 中定义的函数指针类型。

function pointer type        value
---------------------        -----
call_other                   FP_CALL_OTHER
lfun                         FP_LOCAL
efun                         FP_EFUN
simul_efun                   FP_SIMUL
functional                   FP_FUNCTIONAL

此外,在某些情况下会有以下值:
(有参数)                  FP_HAS_ARGUMENTS
(创建函数的对象被摧毁)     FP_OWNER_DESTED
(无法被绑定)              FP_NOT_BINDABLE

最后一组值为位元值(bit values),可以用来做位运算测试,FP_MASK 可以忽略某些位测试函数指针的基本型态。

示例:

测试一个函数值是否是外部函数(efun)指针:

if ((functionp(f) & FP_MASK) == FP_EFUN) ...

测试函数是否有参数:

if (functionp(f) & FP_HAS_ARGUMENTS) ...

`function.h` 文件具体内容如下:
/* codes returned by the functionp() efun */

#ifndef _FUNCTION_H
#define _FUNCTION_H

#define FP_LOCAL 2
#define FP_EFUN 3
#define FP_SIMUL 4
#define FP_FUNCTIONAL 5

/* internal use */
#define FP_G_VAR 6
#define FP_L_VAR 7
#define FP_ANONYMOUS 8

/* additional flags */
#define FP_MASK 0x0f
#define FP_HAS_ARGUMENTS 0x10
#define FP_OWNER_DESTED 0x20
#define FP_NOT_BINDABLE 0x40

#endif

参考

mapp(3), stringp(3), pointerp(3), objectp(3), intp(3), bufferp(3), floatp(3), nullp(3), undefinedp(3), errorp(3), bind(3)

翻译

雪风(i@mud.ren)