[疑难] D语言的陷阱

Colorful 2007-05-10
懒的粘贴复制了。
直接给出地址,哈哈。
http://colorful1982.blog.sohu.com/45473453.html
oldrev 2007-05-10
很好的文章,不过配色看起来很费劲阿。




oldrev 2007-05-10
我感觉你文章里说的问题基本上D specs 里都有记载阿,可能只是理念不同而已。

比如最后一个问题,不同接口中的同名同参数方法是会被合并的,我记得是在文档的某处有记载的。



import std.stdio;

interface IA
{
	void foo();
}

interface IB
{
	void foo();
}

class C : IA, IB
{
	override void foo()
	{
		writefln("C.foo()");
	}
}

//错误设计
class D : C, IA, IB
{
	alias C.foo bar;

	override void foo()
	{
		writefln("D.foo()");
	}
}

void main()
{
	D d = new D;
	d.foo();
	d.bar();
}


运行结果:
D.foo()
D.foo()
Colorful 2007-05-10
呵呵,对于熟悉的人来说,陷阱也就不能称其为陷阱了。
D语言规范能称其为规范,自然是面面俱到。但是相对来说,就比较乏味了。
oldrev 2007-05-10
出本叫 The D Programming Language 的书就行了 
jinheking 2007-05-11
好文章
qiezi 2007-05-12
我刚刚遇到个lazy陷阱:
void foo(void delegate() dg){
    //...
    dg();
}

foo({writefln("aa");});

使用lazy以后:
void foo(lazy void dg){
    //...
    dg();
}

foo({writefln("aa");});

由于可能有多条语句,所以还是喜欢大括号这种委托直接量方式,不过传递给lazy时被它再悄悄包装一层,就不会打印出任何东西了。。。
oldrev 2007-05-12
说来惭愧,我还没用过 lazy 哪
qiezi 2007-05-15
我一直以为const会增大结构呢,C++里面是这样的。const成员和static很像:
struct F {
	const int a = 1;
	const int b = 1;
	const int c = 1;
	const int d = 1;
	const int e = 1;
	const int f = 1;
	int aa = 1;
}

F.sizeof大小是4,如果去掉aa,大小是1(这和C++一致)。
Global site tag (gtag.js) - Google Analytics