异常后清理
谓词 setup_call_cleanup/3
,当前正被考虑包含在 Prolog ISO 标准中并由越来越多的实现提供,这使我们可以确保在抛出异常后正确释放资源。
典型的调用是:
setup_call_cleanup(open(File, Mode, Stream), process_file(File), close(Stream))
请注意,在这种情况下调用 open/3
后,甚至可能会立即发生异常或中断。因此,Setup
阶段是原子地进行的。在只提供 call_cleanup/2
的 Prolog 系统中,这很难表达。