首页 > 解决方案 > defer 之后的语句是否在早期中断迭代时被调用?

问题描述

例如,当使用标准库中的行迭代器迭代文件的行时,如果我使用 break 提前中断迭代,文件是否会正确关闭?

标签: nim-lang

解决方案


正如文档所说:

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.


推荐阅读