使用F#的'use'关键字范围

Old*_*vec 1 f# scope

假设以下代码:

let fn () =
  use a = new System.IO.StreamWriter ("d:\\test.txt")
  a

let b = fn ()
b.Write "t"
Run Code Online (Sandbox Code Playgroud)

它给出以下错误:

ObjectDisposedException:无法写入已关闭的TextWriter.

这是为什么?

Rob*_*ert 7

use的范围是函数,fn所以a返回时它也被处理掉了.

解决这个问题的最简单方法是:

let fn () =
  let a = new System.IO.StreamWriter ("d:\\test.txt")
  a

let main() = 
  use b = fn ()
  b.Write "t"
main()
Run Code Online (Sandbox Code Playgroud)


Dan*_*iel 5

为罗伯特的(正确)答案添加更多内容:您可以更好地控制use范围结构(括号或开始/结束)的范围。请参阅 Brian对相关问题的回答