为了举例,假设我在一个函数中包装了一个StringBuilder,所以我可以在Clojure中更容易地使用它。我可以很容易地在缓冲区上创建函数调用toString的无参数版本,例如
(defn builder
([^StringBuilder sb]
(fn
([] (.toString sb))
([& args]
(doseq [arg args]
(.append sb arg)))))
([] (builder (StringBuilder.))))
这是完全可行的,但是,我想知道如何在函数本身上覆盖.toString(),这样我就可以返回StringBuilder的状态或者我已经关闭的任何其他对象。
答案 0 :(得分:1)
您可以尝试使用https://github.com/technomancy/serializable-fn,这会使函数在打印时包含其封闭范围。它会打印出stringbuilder的pr-str,但这可能与你想要的完全不同。