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

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

0
Clojure

良好的协议使用(和文档示例):使with-open意识到具有不同关闭约定的API的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(实现所有读取器、写入器、流、通道、套接字)。在使用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适用、构建和测试都在最新主分支上干净利落,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) 可以通过以某种方式提供默认实现来规避吗?我想协议可以被扩展到带有实现(.close this)的Object上,但这样会由于Object没有close方法而抛出反射警告。或许可以在Object上扩展并使用java.lang.reflect搜索“close”方法,如果找不到则抛出异常?

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

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