2024 年 Clojure 状态调查! 分享您的想法。

欢迎!请查看 关于 页面以了解更多关于如何使用本站的信息。

0
Clojure

良好的协议应用(和文档示例):使 with-open 能够知晓使用不同关闭约定的 Closable 协议。请参阅 http://groups.google.com/group/clojure/browse_thread/thread/86c87e1fc4b1347c

9 个答案

0

评论者为:importer

http://www.assembla.com/spaces/clojure/tickets/308 转换而来

0

评论者为:tsdh

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

所有测试通过。

0

评论者为:tsdh

这似乎与作用域相关(http://dev.clojure.org/jira/browse/CLJ-2)。

0

评论者为:tsdh

更新了补丁。

0

评论由:jafingerhut

Patch 0001-Added-ClosableResource-protocol-for-with-open.patch,日期为2012年3月8日,在截至2012年4月2日的最新master上应用、构建和测试均无误。Tassilo已签署了CA。

0

评论者为:tsdh

更新的补丁已再次干净地应用到master上。

0

评论由:bbloom

我查阅了这个工单,因为我遇到了一个反射警告:“with-open”没有提示其与java.io.Closeable绑定。

对补丁的一些反馈

1) 这是任何依赖于close方法进行鸭子类型识别的人的一个破坏性更改。

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上扩展,并在实现中通过java.lang.reflect搜索"close"方法,如果没有找到就抛出异常?

请告诉我更多关于:on-interface选项的信息?它与extend有何不同?以及我如何使用此选项添加实现,即(.close this)?

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