作者laechan (小太保)
看板mud_sanc
标题Re: [转载] [蟑螂贺失恋] 中阶 LPC 第5~6章
时间Fri Mar 6 17:24:37 2009
第五章讲字串的高级处理......其实那个大家应该都会了。
[..]
这个很好玩,假设一个 str = "abcdef", 那 str[0..2] 就是
等於 "abc" (取出第0个char~第2个char之间的东西)
作者有提到有趣的范例就是 "abcdef"[0..2] 这样的语法,例
如...
write("abcdef"[0..2]+"\n"); 其结果就是秀 abc 这个字串。
sscanf
文中有提到一个特殊用法...
int x;
sscanf("145", "%d", x);
我们知道 atoi("145") 其实就会传回整数的 145,但也可以
用上面的例子来实现,例如圣殿有把字串变整数的 atoi 函数
可用,但是没有把浮点数变字串的函数怎麽办?
float x = 1.05;
string str;
sscanf(x,"%f",str);
这样 1.05 就会变成字串的 "1.05"了 <= 如果翻译的文没说错的话XD
它另外有提到 %* 是要丢弃的东西,这个我没实际用过,但它
的想法就是...
sscanf("20 int to baha","%d %s to %s",money,money_kind,who);
就是把 20 gold to baha 拆解出三个变数,但是在圣殿里头影特币几
乎是唯一的交易单位,我们虽读出了 money_kind 但实际上这变数几乎
用不到,这时我们就可以这样写..
sscanf("20 int to baha","%d %*s to %s",money,who);
这样我们就不用去宣告 money_kind 这个东西了。
(然後 20 跟 to 之间依然还是得接东西,只是不一定要接 int)
::create()
这个其实是很简单的概念,例如 ROOM = "/std/ob/room.c"
"/std/ob/room.c"
==========================================================
它宣告了一个 create() 函数
"/u/l/laechan/test.c"
==========================================================
inherit ROOM;
我自己的房间也宣告了一个 create() 函数
问题:我如何在我的 create() 中先套入 ROOM 里头的 create
呢?
方法有两种..
1)ROOM->create();
2)::create();
作者就是在告诉你,如果你已经 inherit ROOM 了,那用 ::的
语法就可以把 ROOM 里头的 create 拿来用。
函式和变数标签
这个我懒得研究,大致有三种,我简单说一下我知道的...
static
如果我们在一个有用 save_object/restore_object 的系统
中有用 static 宣告一些变数的话,那这些变数是不会被存
进 .o 资料档里头的,大乐透有些变数就是用 static 宣告
,因为并不是所有资料都得被存进去,例如..
static mixed nums=({"01","02",.......})
private(私有)
这个意思就是,例如我某个物件里头定义了一个函数..
private change_short(string str)
{
set("short",str);
}
然後我们要改这个物件的 short 而去 call 它..
call xxx;change_short;"一个房间"
基本上这个 call 是不被接受的,它只被这个物件自己呼叫
时才能改。
"一个私有变数或函式只能由宣告它的物件内部参考之"
例如我写在这个物件里头的某个程式段有 change_short,
这就是合法的,外部 call 的方式就是非法的。
nomask
这主要是用在 inherit 里头,以上例来说,ROOM 有定义一
个 create,我自己的房间也有定义 creatr,但假若 ROOM
的定义是..
nomask create()
那我的 room 如果继承 ROOM 的话就不能定义 create,因
为 ROOM 的 create 已经被设为 nomask 了。
private 跟 nomask 通常是用来保护一些东西用的。
(刚看完文,我觉得它跟我讲的东西大概差不多,还好...XD)
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.170.228.153