Erlang 尝试 - 捕获 - 读取文件时之后



我看了这个问题,相信我理解了解决方案,除了以下几点:

try get_all_lines(Device)
    after file:close(Device)
end.

查看文档,特别是 7.19 Try 部分,看起来人们通常会使用 after 子句作为故障安全块来执行,而不管条件块的执行如何。如果这是一个正确的假设,为什么给定的示例会使用 after 不仅没有条件块,而且根本没有块!看起来try get_all_lines(Device)块完全是空的,并附加了一个不必要的after子句。我是否误解了该示例,或者此代码可以写得更好?

块不为空,它包含一个函数调用:get_all_lines(Device) 。如果此函数内部的io:get_line抛出异常(例如,因为文件在读取时被删除,那么get_all_lines也会抛出,在这种情况下和函数返回时都需要关闭文件没有异常。这正是after的目的。

最新更新