例として、Clojureでより簡単に使用できるようにStringBuilderを関数でラップしたとします。バッファ上で引数なしバージョンの関数呼び出しtoStringを簡単に作成できます。
(defn builder
([^StringBuilder sb]
(fn
([] (.toString sb))
([& args]
(doseq [arg args]
(.append sb arg)))))
([] (builder (StringBuilder.))))
これは完全に機能しますが、関数自体で.toString()をオーバーライドして、StringBuilderまたは閉じた他のオブジェクトの状態を返すことができるのではないかと思います。