1

例如,假设我将 StringBuilder 包装在一个函数中,以便在 Clojure 中更轻松地使用它。我可以轻松地在缓冲区上制作函数调用的无参数版本 toString ,例如

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

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

4

1 回答 1

1

您可以尝试使用https://github.com/technomancy/serializable-fn,它使函数在打印时包括其封闭范围。不过,它会打印 stringbuilder 的 pr-str,这可能是也可能不是您想要的。

于 2012-10-07T05:58:11.747 回答