Functionp

来自MudWiki

名称

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

语法

   int functionp( mixed arg );

描述

   如果 `arg` 是函数指针返回非零针,否则返回0。函数指针是函数类型的变量。
   如:function f = (: this_player(), "query" :);
   或:function f = (: write, "Hello, world!\n" :);

   返回值为驱动程序 "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)