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

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

0
Clojure

协议和文档示例的合理使用:使 with-open 了解使用不同关闭约定的 API 的 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,日期为12年3月8日,在截至2012年4月2日的最新主分支上应用、构建和测试干净。Tassilo已签署CA。

0

评论:tsdh

更新补丁以再次干净地对主分支应用。

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并在实现中搜索"close"方法的同时使用java.lang.reflect和在找不到时抛出异常?

你能告诉我更多关于:on-interface选项的信息吗?它与extend有什么不同?如何使用此选项添加实现,例如(.close this)?

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