当表达式超出范围时,如何运行函数?

时间:2015-12-14 01:34:15

标签: clojure garbage-collection

我的表情有副作用:

(database-reference "sites" "stackoverflow" "users")

这会创建一个必须清理的引用。在功能上,我需要

(let [ref (database-reference ...)]
  (do-things-to ref)
  (.close ref)

但始终指定let形式对其他程序员(我的用户)来说非常直观。要求一直使用宏也是不合适的。

我想在.close超出范围时自动致电ref。我可以为所有database-reference实施协议,但我找不到合适的协议。我的直觉是说:

(deftype DatabaseReference [stuff]
  clojure.lang.IDispose
  (dispose [this] (.close this))

但当然不存在clojure.lang.IDispose

0 个答案:

没有答案