Re: [wizs] 字串比大小程式
※ 引述《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
推
02/11 07:52, , 1F
02/11 07:52, 1F
討論串 (同標題文章)