关于LPC语言你可能不知道的实用冷知识

LPC游戏开发,我们看看代码能学个大概,但到写代码时发感觉,为什么别人写的代码那么简洁优秀,自己写的这么麻烦?除了天天复制粘贴的那些代码,我们有多少不知道的知识点?

这里整理一些冷门知识点,看你能GET多少。其中有部分在LPC基础教程中都有讲过或提过,但因为冷门可能没有被大家重视,这里整理到一起,做个冷知识小节。

冷门程度根据常规MUD中使用的多少判断,用的越少越冷门,最高五星(★★★★★),实用程度根据这个功能的实用性评价,最高五星(★★★★★)。都是本人个人评价,仅供参考。

关于数组的定界符

冷门程度:★★★★★

实用程度:★★★★

我们基本都知道对字符串赋值可以使用字符串定界符格式:

string text = @TEXT
    积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。
故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,
功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,
上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。
TEXT;

但很多人不知道字符串数组也有定界符格式的赋值方式。如下代码:

void test()
{
    string *poem = @@TEXT
【摊破浣溪沙】

揉破黄金万点轻,
剪成碧玉叶层层。
风度精神如彦辅,
太鲜明。

梅蕊重重何俗甚,
丁香千结苦粗生。
熏透愁人千里梦,
却无情。

TEXT;

    foreach(string line in poem)
    {
        write(line + "\n");
    }
}

代码中 poem 是字符串数组,相对字符串的赋值使用一个 @ ,数组是使用二个 @@,在很多情况下使用这个会让你更轻松。

关于对象的继承

冷门程度:★★★

实用程度:★★★★

我们先上代码,分别新建 a.cb.cc.c三个文件,每个文件的代码都是:

void f()
{
    debug(__FILE__);
}

如果有文件d.c同时继承abc三个文件,代码如下:

inherit __DIR__ "a";
inherit __DIR__ "b";
inherit __DIR__ "c";

void f()
{
    ::f();
}

那么在d.c中调用 ::f() 是哪个继承对象中的方法?a?b?c?另外,如果在d.c中不重写f()的话,d.c 调用 f()::f() 一样吗?

对以上二个问题我不给答案,欢迎留言回答,如果不确定可以自己测试一下。这里主要是补充的冷知识是,在继承多个同名方法时,我们可以明确父对象,继承指定对象中的方法。如:

inherit __DIR__ "a";
inherit __DIR__ "b";
inherit __DIR__ "c";

void f()
{
    a::f();
    b::f();
    c::f();
}

使用对象::方法()的方式调用继承对象的方法,这是一个好习惯,推荐在调用继承对象的方法时使用这种格式,如果可能重复继承时,也养成重写方法并明确指定的习惯,否则不只是可能继承错方法,还会报重复继承的警告。

关于create()方法

冷门程度:★★★★

实用程度:★★★★★

create()这个apply方法的作用大家都知道,但是我们多数人不清楚这个方法是可以带参数的。如下示例:

varargs void create(string name, int age)
{
    // 你的代码
}

然后,我们可以使用 new(file, name, age) 的方式个性化的初始化对象,这在某些情况下非常有用,很多WIZ是重复建一堆类似的文件,而通过参数我们其实可以实现一个文件生成无数个不同属性的对象,配合虚拟对象功能 compile_object() 你可以很容易的用一个文件实现无限的世界。

关于函数的可变参数

冷门程度:★★★★★

实用程度:★★★★

我们知道varargs这种可变参数的使用,那你知道以下这种用法吗?

void test(mixed *x...)
{
    printf("x = %O\n", x);
}

运行后自己传参数调用试试?你传的所有参数都成为数组 x 的元素,而且没有限制参数数量。如:test()test(1,2,3)test("hello",1,2,({3,4,5}))test(1,3,5,(["name":"abc","age":12]),3.14)

这个用法和使用 varargs 相比还有一个很大的不同点,不传参数时函数参数在 varargs 定义的函数中是未定义状态(undefinedp/nullp),不管任何类型默认初始化为整型值为0,但在这里是初始化为空数组。

关于socket

冷门程度:★★★

实用程度:★★★★★

想了解?回贴可见,注意请不要回复无意的垃圾内容~

关于函数指针

冷门程度:★★

实用程度:★★★

想了解?回贴可见,注意请不要回复无意的垃圾内容~

关于预处理指令

冷门程度:★★★★★

实用程度:★★

想了解?回贴可见,注意请不要回复无意的垃圾内容~

关于FluffOS新增的一些efun

冷门程度:★★★

实用程度:★★★

更新中………………………………不!没有回贴不更新

京ICP备13031296号-4