OCaml中与Python的"with"语句对应的是什么?
with open('test.txt', 'r') as f:
# Do stuff with f
# At this point, f will always be closed, even in case of exceptions
那就是:在OCaml中,如何安全地确保某个资源(打开文件、数据库连接、HTTP连接等)在特定时刻总是被释放?在这里等待垃圾回收器不是一个选项,并且异常也不应该防止资源被释放。当然,在OCaml中,你总是可以使用try-finally并手动关闭文件,就像在Python中一样。然而,这种代码容易出错。这就是为什么Python引入了“with”语句的原因。那么,在OCaml中,如何使这种代码更易于阅读并减少错误呢?请注意,这个问题与在OCaml中模拟try-with-finally的问题非常不同,因为这是进一步的一步:我不仅想在OCaml中模拟try-finally!(顺便说一下,Lwt的[%finally ...]做得很好。)我想进一步,消除在第一次编写这些finally子句的需要 - 就像在Python中一样。请注意,这个问题不涉及实现细节,而是关于惯用法:所有可能的设计和解决方案中,哪些在OCaml社区中得到了一些推广并被普遍接受?
unwind
示例),很容易实现这些特性。一旦你在一个函数中编码了所需的行为,你就可以在需要该行为的任何地方重用这个函数,并且该函数的复杂性被隐藏在实现细节中,从调用者的视线中消失了。 - Mulan