[疑难] 请教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 |
相关讨论
相关资源推荐
- eclipse-snippets.rar
- AOP != Interception (译文)
- java.util.ConcurrentModification…
- Eclipse安装spring插件及报错解决
- 开篇: Eclipse templates/snippets的使用
- Eclipse安装SVN插件的两种方式
- WebStrom安装react snippets插件后,输入快捷键仍然不提示问题
- vscode安装react插件:ES7+ React/Redux/React-Native snippets
- org.eclipse.jface.snippets
- org.eclipse.swt.snippets