2024 年 Clojure 调查中分享您的想法!

欢迎!请查阅 关于 页面以获取更多关于如何使用本站的信息。

0
Clojure

良好的协议使用(和文档示例):使 with-open 对不同的关闭约定的 Closable 协议有所了解。见 http://groups.google.com/group/clojure/browse_thread/thread/86c87e1fc4b1347c

9 个答案

0
0

评论者:tsdh

添加了 CloseableResource 协议,并在 java.io.Closeable 上进行了扩展(所有 Reader、Writer、Stream、Channel、Socket 都实现了)。在 with-open 中使用。

所有测试均通过。

0

评论者:tsdh

看起来与作用域(http://dev.clojure.org/jira/browse/CLJ-2)有关。

0

评论者:tsdh

更新了补丁。

0

评论者:jafingerhut

补丁0001-Added-ClosableResource-protocol-for-with-open.patch(日期为2012年3月8日)适用于最新master版本,并在此版本的2012年4月2日进行了构建和测试。Tassilo签发了CA。

0

评论者:tsdh

已更新补丁,使其再次干净地对master版本进行应用。

0

评论者:bbloom

我查阅这个票据是因为我遇到了一个反射警告:with-open没有提示它与java.io.Closeable绑定

对补丁的一些反馈

1) 这是对依赖close方法进行duck-typed的人的一个重大更改。

2) CloseableResource有点长。clojure.core.protocols.Closeable足够清晰了。

与其扩展CloseableResource到java.io.Closeable,您可以使用不为人知的(可能是未记录的/不受支持的?):on-interface指令

(defprotocol Closeable :on-interface java.io.Closeable (close [this]))

这将比现有的补丁表现得更好。

0

评论者:tsdh

布兰登,两个问题

1)能通过提供某种默认实现来规避吗?我猜协议可以在Object的基础上进行扩展,实现(.close this),但这将给出一个反射警告,因为Object没有close方法。可能可以扩展到Object并在实现中查找一个“close”方法,如果找不到则抛出异常吗?

您能否请你多告诉我一些关于:on-interface选项的信息?它与extend如何不同?以及如何使用该选项添加实现,即(.close this)?

0
参考:https://clojure.atlassian.net/browse/CLJ-308(由 alex+import 报告)
...