“Functionp”的版本间的差异

来自MudWiki
描述
Ivy讨论 | 贡献
描述
 
第32行: 第32行:
 
     示例:
 
     示例:
 
   
 
   
     测试一个函数值是否是外部函数(efun)指针:
+
     测试一个函数指针是否是外部函数(efun)指针:
 
   
 
   
 
     if ((functionp(f) & FP_MASK) == FP_EFUN) ...
 
     if ((functionp(f) & FP_MASK) == FP_EFUN) ...

2022年9月1日 (四) 19:08的最新版本

名称

   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 */

#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

参考

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

翻译

   雪风(i@mud.ren)