defer:之后的语句是否会在早期中断迭代时被调用?

时间:2019-01-20 09:46:35

标签: nim

例如,当使用标准库中的lines迭代器遍历文件的各行时,如果我使用break提前中断了迭代,文件会正确关闭吗?

1 个答案:

答案 0 :(得分:1)

如文档所述:

var f = open("numbers.txt")
defer: close(f)
f.write "abc"
f.write "def"

被翻译成:

var f = open("numbers.txt")
try:
  f.write "abc"
  f.write "def"
finally:
  close(f)

因此,即使close(f)包含try,也总是在break代码之后调用。