2016-09-13 4 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'を制御している。私が望むものありがとう! –

関連する問題