2013-12-17 89 views

回答

4

這是一個壞主意,在全球範圍承擔所有字節數組是一個可打印的字符串,因此建議只使用String構造是正確的。也就是說,你可以按類型在全球範圍內添加新的打印。

根據*print-dup*是否爲true,打印功能最終會轉移到print-methodprint-dup多種方法的調用。您可以添加一個新的方法print-method使用core_print.cljprint-sequential輔助函數如下:

(in-ns 'clojure.core) 

(def ^:private ByteArray (type (byte-array 0))) 

(defmethod print-method ByteArray [ba ^Writer w] 
    (print-sequential "[" pr-on " " "]" ba w)) 

注意這只是打印一個字節數組,就好像它是個字節的向量:

clojure.core=> (in-ns 'user) 
#<Namespace user> 
user=> (byte-array (map byte "This is a test")) 
[84 104 105 115 32 105 115 32 97 32 116 101 115 116] 
2

我不推薦重寫toString。這是太多的全球變化,你可能會打破一些繼承了默認行爲的東西。

爲什麼不根據您的特定要求創建函數?

+0

我從來沒有嘗試過reify(我也不能說我完全理解它是如何工作的,或者我會在哪裏使用atm)。但是,是否有可能使用reify作爲該用例? –

+0

當需要某個接口,協議和/或對象的一次實例時,「reify」是合適的。如果可以將它用於Java的原始數組,那麼'proxy'將會更適合,但從我的經驗和我嘗試過的東西來看,似乎並不是這樣。 @AlexTaggart解決方案似乎對我來說是最好的。 –

+0

謝謝澄清! –

相關問題