fluffos Logo
Fluffos
    • 项目资源
    • 官网网址
    • 下载
    • 工具
    • 下载PDF(开发中)
    • 下载Html压缩包(开发中)
    • 编辑
    • 编辑当前页面

      编辑当前页面内容
    • 创建新页面

      添加创建当前页面内容
    • 更新
    • 创建时间:2019-01-04 13:09:57
    • 创建者:final
    • 最后更新:2020-02-13 14:02:48
    • 最后更新者:final
    • 项目列表(逐步完善中)
    • Evennia 中文文档
    • Fluffos 中文文档
    • Ldmud 中文文档
    • Muddery 中文文档
    • Mudos文档(官方停止更新-同Fluffos)
    • (管理者项目开发中)
    • 0 创建编辑文档列表
    • 个人设置
    • 锁定屏幕
    • 登出

Fluffos 中文文档

  1. 首页
  2. API文档
  3. 函数(functions)
函数(functions)

函数(functions)


apply

处理函数指标 (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)

bind

变更一个函式指标 (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)

evaluate

执行一个函式指标 (function pointer)
语法:
mixed evaluate(mixed f, ...)混合 evaluate( 混合 f, ... )
用法:
如果 f  是一个函式, 就会以第二个参数以後 (即上面 ...的地方) 为 f  使用的参数呼叫 f. 而 f  如果有传回值,evaluate( f, ... )  就相当於直接呼叫 f  的结果.
翻译:Spock @ FF 97.Feb.12. (printed 3/16/95)

functionp

判断指定的变数是否为一个函式指标
说明:
如果 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) ..

温馨提示

当前页面内容可随意编辑. 但是需要管理员人工审核.

fluffos logo

Fluffos 中文文档

高性能的Mud Driver
  • 目录索引
  • 更新日志
  • 编译
    • Lunix编译
    • Windows编译
  • API文档
    • 互动函数(interactive)
    • 字符串(strings)
    • 套接字(sockets)
    • 物件(objects)
    • 数字(numbers)
    • Mudlib(mudlib)
    • 映射(mappings)
    • 内部处理(internals)
    • 常规(general)
    • 函数(functions)
    • 浮点数(floats)
    • 文件处理(filesystem)
    • 数据库(dbase)
    • 编译(compile)
    • 调用(calls)
    • 缓冲区(buffers)
    • 阵列(arrays)
    • 系统(system)
  • 其他
    • 配置 options.h
最后编辑:final 最后更新时间:2020-02-13 14:02:48
最后编辑:final 最后更新时间:2020-02-13 14:02:48

© 2019 Final开发维护 邮箱:finalcn#126.com