Modest opinions  
by a humble autodidact
假设有这么一个F#表达式(为了清楚,没有用#light格式):
(use var = expr in expr1;
 expr2;
 expr3)
现在的问题是这段代码的syntax tree是什么样的?具体的问题就是use ... in与;分隔符哪个的优先级更高?答案可能出乎意料-上面的代码看起来有点误导,实际上它等于:
(use var = expr in
 (expr1; expr2; expr3))
由此引出的不重要后果是expr2、expr3也可使用var,而重要后果就是:要等到expr3执行完,var的scope才结束,var才会被dispose。因此如果var仅在expr1里使用的话,为了及时释放资源,程序应该这样写:
((use var = expr in expr1);
expr2;
expr3;
)
或者用begin ... end代替(...)也可以。

posted on 2008-03-17 11:47  yushih  阅读(171)  评论(1编辑  收藏  举报