簡體   English   中英

如何在Clojure中的函數上覆蓋toString?

[英]How to override toString on a function in Clojure?

舉例來說,假設我將StringBuilder包裝在一個函數中,以便可以在Clojure中更輕松地使用它。 我可以輕松地在緩沖區上使函數調用toString的無參數版本

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

這是完全可行的,但是,我想知道如何在函數本身上覆蓋.toString(),以便返回StringBuilder或已關閉的任何其他對象的狀態。

您可以嘗試使用https://github.com/technomancy/serializable-fn ,這會使函數在打印時包括其封閉范圍。 但是,它將打印stringbuilder的pr-str,它可能與您想要的不一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM