作者laechan (小太保)
看板mud_sanc
标题Re: [转载] [蟑螂贺失恋] 中阶 LPC 第3~4章
时间Fri Mar 6 16:59:54 2009
string * 与 mixed
资料型态的部份其实大家大概都会用了,圣殿早期用到阵列时多半
是用 string * 或 int * 这样的宣告方式,例如..
string *a;
int *b;
a=({"1","2",...})
b=({1,2,3,...})
但现在多用 mixed。但 mixed 依据其字义是混合,意思就是说它
是混合的型态─自然也可以用阵列。
例如假设玩家身上有个储存格叫 xxx,我们不知道 query 过来的
东西是啥,想去判断时...
mixed da=ppl->query("xxx");
这样的写法就适用於 query 回来的东西「不管是啥,da 都可以
存」,然後再做底下的简易分类...
if(stringp(da))
return "da 是一个字串";
else if(intp(da))
return "da 是一个整数";
else if(mapp(da))
return "da 是一个 mapping";
else if(objectp(da))
return "da 是一个物件";
else if(arrayp(da))
return "da 是一个阵列";
(所以绝对不会有 mixedp 这样的鬼东西)
member_array
这个很好用,但 wiz 似乎很少用,它是用来判断一个元素有没
有存在於一个阵列里头,有的话传回所在位置,没有的话就传回
-1
mixed str_array = ({"abc","de","fghi"});
if(member_array("abc",str_array)!=-1)
return "abc 这个字串有在 str_array 这个阵列中
(ㄟ,我想起来了,之前的 wiz test 好像有一题这个)
前编译器
作者花了一整个章节讲这个。各位只要记哪些是常见的就可..
#define (大家都会用)
#undefine (没记错的话 #undef 好像也可)
#include (大家都会用)
#ifdef
#ifndef
#if
#elseif
#else
#endif
#pragma
#define 跟 #undef 我有用在某个区域,原先区域内的房间
都是继承 ROOM,然後都 #include 同一个 .h 档。
某一天我突然不想让它们继承 ROOM,我希望它们继承别的,
但我又不希望去改房间的档案时,简易的做法就是在 .h 档
中这样子写...
#include <mudlib.h> // 这时 ROOM 也被 include 进来
#undef ROOM
#define ROOM __DIR__+"my_room.c"
这样全房间继承到的 ROOM 实际上就会指向 my_room.c 了
再举个例子,例如我用 LOTTE_OPEN = 1 来定义现在可以赌
大乐透..
#define LOTTE_OPEN 1
那假设我希望我只要把这行砍掉 or // 掉,就可以达到让
整个大乐透系统处於无法签注的情况时,假设底下是签注函
数..
int bet_xxx(string str)
{
#ifudef LOTTE_OPEN
write("你现在不能签阿乐喔!!\n");
return 1;
#endif
write("你现在可以签阿乐.\n");
return 1;
}
它的意思就是说如果我有 #define LOTTE_OPEN 这个东西时
才可以签,没有 #define (#ifundef) 就不能签。
(#ifdef 是类似的用法)
而它叫做「前译处理」,想简单一点......就是系统会预先
做的事情,例如你在 update 一个东西时,用 # 去定义的东
西它就会先去处理,大概是这个意思。
文章里有举到一些范例,就可以看看。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.170.228.153