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

欢迎!请访问关于页面,获取更多有关此功能的信息。

0票数
Clojure

协议的使用和文档示例都不错:使 with-open 对不同关闭约定的 API 的 Closable 协议有所认识。请参阅http://groups.google.com/group/clojure/browse_thread/thread/86c87e1fc4b1347c

9个回答

0票数

评论者:导入者

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

0票数

评论者:tsdh

添加了 CloseableResource 协议,并扩展了它以支持 java.io.Closeable(由所有读取器、写入器、流、通道和套接字实现)。在 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日的最新主分支上编译并测试顺利。Tassilo已签名CA。

0票数

评论者:tsdh

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

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

嗨,Brandon,两个问题

是否可以通过以某种方式提供一个默认实现来回避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报告)
...