我看了这个问题,相信我理解了解决方案,除了以下几点:
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
的目的。