我的表情有副作用:
(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
。