[疑难] 请教Scope Statement!

Colorful 2007-07-31
不是很明白D语言中的Scope Statement,望达人指教一二。
它的语义偶明白,比如scope(exit),scope(failure),scope(success)。
主要是它的执行次序没怎么看懂,D语言规范里面说是按照出现的次序倒序执行,比如
{
    scope(exit) writef("1");
    scope(success) writef("2");
    scope(exit) writef("3");
    scope(success) writef("4");
}
writefln();

但是下面这两段代码没怎么看明白。
示例1:
writef("1");
{
    writef("2");
    scope(exit) writef("3");
    scope(exit) writef("4");
    writef("5");
}
writefln();

示例2:
class Foo
{
    this() { writef("0"); }
    ~this() { writef("1"); }
}

try
{
    scope(exit) writef("2");
    scope(success) writef("3");
    auto Foo f = new Foo();
    scope(failure) writef("4");
    throw new Exception("msg");
    scope(exit) writef("5");
    scope(success) writef("6");
    scope(failure) writef("7");
}
catch (Exception e)
{
}
writefln();


BTW,貌似现在auto语义变成了类型推导,而scope则代替了auto原先的语义,不知道是不是这样。
oldrev 2007-07-31
恩,从来没用过超过一个的scope。
	writef("1");  
	{  
		writef("2");  
		scope(exit) writef("3");  
		scope(exit) writef("4");  
		writef("5");  
	}  
	writefln();  

首先执行 writefln("1");
接着进入一个无名域,依次执行嗯 "2", "5",接着退出无名域时反序执行 "4" "3"。

scope 有两种用法,scope(*) 的用法类似 try/catch/finally而 scope class ClassName 和 scope Type obj = ...; 的用法用于指定存储类,在stack上分配对象而不是在GC中,跟 static class ClassName 和 static Type obj = ...; 差不多

auto 用于自动类型推导,跟 C++ 0x 的用法一样
oldrev 2007-07-31
示例2: auto当scope的用法已经过时了,但是编译器似乎还没禁止。
tomqyp 2007-07-31
以前我也问过这个问题
http://dlang.group.iteye.com/group/post/3482

Global site tag (gtag.js) - Google Analytics