如何在Clojure中的函数上覆盖toString?

时间:2012-10-07 02:40:10

标签: clojure

为了举例,假设我在一个函数中包装了一个StringBuilder,所以我可以在Clojure中更容易地使用它。我可以很容易地在缓冲区上创建函数调用toString的无参数版本,例如

(defn builder
  ([^StringBuilder sb]
     (fn
       ([] (.toString sb))
       ([& args]
          (doseq [arg args]
            (.append sb arg)))))
  ([] (builder (StringBuilder.))))

这是完全可行的,但是,我想知道如何在函数本身上覆盖.toString(),这样我就可以返回StringBuilder的状态或者我已经关闭的任何其他对象。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用https://github.com/technomancy/serializable-fn,这会使函数在打印时包含其封闭范围。它会打印出stringbuilder的pr-str,但这可能与你想要的完全不同。