作者laechan (小太保)
看板mud_sanc
标题[wizs] 闲聊物件资料读取
时间Fri Jul 1 18:15:25 2011
例如说,以前 whos 指令的写法是..
tmp+="["+to_chinese(ppl->query("gender"))+
to_chinese(ppl->query("race"))+
to_chinese(ppl->query("pri_guild"))+"]"+
ppl->query("short")+", 等级 "+ppl->query("level")+" 级, "+
get_age(ppl->query("real_age"))+" 岁.\n"+
.
.
.
"所在位置: "+environment(ppl)->query("short")+"\n"+
ppl->query("long")+"\n";
write(tmp);
各位可以发现,上面用了非常多的 ppl->query(),每一个
query 都是对 ppl 的一次呼叫,上面就做了 n 次呼叫。
那麽,怎麽简化它?很简单,就是在 ppl 这个物件的本体
(也就是 /std/user.c) 里头建立一个专用函数即可,如下..
string whos_string()
{
return "["+to_chinese(data["gender"])+
to_chinese(data["race"])+
to_chinese(data["pri_guild"])+"]"+
data["short"]+", 等级 "+data["level"]+" 级, "+
get_age(data["real_age"])+" 岁.\n"+
.
.
.
"所在位置: "+environment(me)->query("short")+"\n"+
data["long"]+"\n";
}
这时候,原本的 ppl->query() 就变成是由本地直接读取
物件资料 data,这麽一来就不用做 n 次的 query 呼叫,
只需要在 whos 指令里加这麽一行即可...
write(ppl->whos_string());
上述的改善,简单的说就是,当你要处理的资料几乎都在
那个物件的「本地端」时,那不如就在那个物件里直接做
变数的运算(以上面来说就是做字串的累加),之後再把运
算完的东西传回 whos 指令处即可。
这在 sanc 的 coding 来说是很重要的概念,希望各位记
住,laechan 在 /std/user.c 里头有新增不少这类的函数
,大抵上就是在做类似用途的,例如 score_string 也是
,sanc 如果不做这些改善,是没办法跑这麽多在线数的。
各位只要记得一个原则就可,就是如果你得从某个物件读
取大量的资讯,却只为了呈现某个结果时,那还不如就直
接在那个物件里头就把结果 run 好,再回传过来就好。
Belldandy.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 115.81.16.93