nim-lang - defer 之后的语句是否在早期中断迭代时被调用?
问题描述
例如,当使用标准库中的行迭代器迭代文件的行时,如果我使用 break 提前中断迭代,文件是否会正确关闭?
解决方案
正如文档所说:
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
.
推荐阅读
- html - 如何使用 HTML 和 CSS 创建邮箱
- swift - Firebase Firestore 文档计数返回为零值
- amazon-web-services - 如何读取 JSON 文件并在命令行中传递它?
- python - [Tensorflow 2]如何为具有不一致形状的数据的多输入多输出模型构建数据输入管道
- c++ - WinHttpQueryDataAvailable 表示可用数据少于预期
- swift - Swift 函数输入通用符合类和协议
- android - 在 LG Android 10 设备上从 WorkManager 获取 DeadSystemException
- ios - 弹出JSON解码错误,不知道还有什么可以尝试的
- c# - 如何使用 Microsoft 场景理解 SDK 和 hololens2 将 Unity 场景与玩家的物理房间对齐?
- swift - AVAudio 和离线手动渲染模式 - 无法将更高频率的缓冲区写入输出文件