Defer语句

可以使用 defer 语句而不是 try finally 语句。

当前块中 defer 之后的任何语句都将被视为隐式try块:

  1. proc main =
  2. var f = open("numbers.txt")
  3. defer: close(f)
  4. f.write "abc"
  5. f.write "def"

被重写为:

  1. proc main =
  2. var f = open("numbers.txt")
  3. try:
  4. f.write "abc"
  5. f.write "def"
  6. finally:
  7. close(f)

不支持顶级 defer 语句,因为不清楚这样的语句应该引用什么。