作者cloderw (漫云端)
看板mud_sanc
标题Re: [wizs] 字串比大小程式
时间Tue Feb 10 23:04:56 2009
※ 引述《laechan (小太保)》之铭言:
: 圣殿比较少用到这个(我也没用过:p),上面的东西类似底下..
: mixed usr=users(),allnames=({});
: object ppl;
: foreach(ppl in usr)
: allnames+=({ ppl->query("name") });
: 或者用这个...
: mixed allnames=users();
: int i,j;
: object ppl;
: for(i=0,j=sizeof(allnames);i<j;i++)
: {
: ppl=allnames[i];
: allnames[i]=ppl->query("name");
: }
: cloud 提供的部份只用一行解决,简洁很多^^
: mixed *map_array( mixed *arr, string fun, object ob,
: mixed extra, ... );
: (在上面的例子下使用 map = 使用 map_array)
: 如果看不懂上面就跟 sort_array 对照看..
: mixed *sort_array( mixed *arr, string fun, object ob );
: 类推一下..
: (不过 (: :) 这个我之前怎麽看都看不懂哩,哈哈...)
我是 clode..XD
其实程式还是看得懂比较重要
尤其是像你们这种重视团队开发的
让所有 wiz 都能快速掌握与学习还是最重要的
我只是提供一个单纯以追求效能为目的的方法..:p
至於 (: :) 是一种 function pointer(函式指标?) 的语法
例如
void foo(int i) { }
void main()
{
function fp = (: foo($1) :); // 宣告一个函式指标变数
evaluate(fp, 50); // 执行 fp 这个 function, 并传入 50 这个参数
}
另外以 sort_array 的例子来说
可以用下面语法直接完成一组单纯的字串排序
allnames = sort_array(allnames, (: strcmp($1, $2) :));
其原理就是先取得 (: strcmp($1, $2) :) 这个函式指标
随後 sort_array() 这个 efun 就会将 allnames 里的元素
依序两两带入 $1 和 $2 这两个参数里
作为 strcmp 这个 function 的 input
函式指标在 MudOS 中的应用很多
一般而言善用函式指标也可以增进许多效能
因为可以减少 call_other 这个步骤
一般在处理 ob->query("name") 这类的程式码时
在 MudOS 等同於 call_other(ob, "query", "name")
其中大概的流程是
call_other 取得 ob 的指标後开始搜寻 ob 本身的 function table
此时若 ob 的继承树很大棵或是本身函式众多
搜寻过程就会很费时间
直到 call_other 在 ob 中找到了 query 这个 function 的指标後
才把 "name" 这个字串作为 input 丢进去执行 query
相对的如果今天是使用 fp
就可以直接跳过搜寻 function table 的动作
直接执行 query 这个函式
自然效率就会大幅增进了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.169.35.9
1F:推 laechan :了解^^ 02/11 07:52