2016-09-13 31 views

回答

8

如果您可以更改defrecord聲明,只需在該處實施clojure.lang.Named界面。

(defrecord MyRecord [name] 
    clojure.lang.Named 
    (getName [this] 
    (:name this))) 

(name (MyRecord. "Dan")) 
;;=> "Dan"" 
+1

同意的辦法,我想補充一件事:該記錄的聲明是擁有一定是一個必要的前提條件*假設*執行是*不*所擁有的接口。至少,如果既沒有類型/記錄也沒有接口/協議,則需要非常仔細地考慮這種實現。 [Clojure庫編碼標準](http://dev.clojure.org/display/community/Library+Coding+Standards)包含了協議的這個規則,但它顯然也適用於接口。 (我不認爲OP有這個問題,但我認爲一般警告是有保證的。) –

+1

此外,我覺得getNamespace也應該實現(平凡) –

+0

我在控制'defrecord',所以這是完全正確的我想要的是。謝謝! –