Dao*_*Wen 5 clojure try-with-resources
Clojure是否具有Java的try-with-resources构造的等价物?
如果没有,在Clojure代码中处理这个习惯用法的常用方法是什么?
用于安全打开和关闭资源的Java-7之前的习惯用语非常冗长,以至于它们实际上增加了对该语言的try-with-resources的支持.对我来说,在标准的Clojure库中找不到这个用例的宏似乎很奇怪.
基于Clojure的主流项目存储库的一个示例 - 显示如何在实践中处理此问题 - 将非常有用.
您可以使用with-open将资源绑定到符号,并确保在控制流离开块时关闭资源.
以下示例来自clojuredocs.
(with-open [r (clojure.java.io/input-stream "myfile.txt")]
(loop [c (.read r)]
(when (not= c -1)
(print (char c))
(recur (.read r)))))
Run Code Online (Sandbox Code Playgroud)
这将扩展到以下内容:
(let [r (clojure.java.io/input-stream "myfile.txt")]
(try
(loop [c (.read r)]
(when (not= c -1)
(print (char c))
(recur (.read r))))
(finally (.close r))))
Run Code Online (Sandbox Code Playgroud)
您可以看到let使用try- finally调用.close()方法创建了一个块.
| 归档时间: |
|
| 查看次数: |
721 次 |
| 最近记录: |