6

私は次のようなことをしたいと思います:

(defrecord Base [])
(defrecord Person [])
(defrecord Animal [])

(derive Person Base)
(derive Animal Base)

(isa? Animal Person)

これは可能ですか?

アップデート:

それ以来、これは不可能であることに気付いたので、次のようなことをしています。

(defmulti type class)
(defmethod type Base [_] ::base )
(defmethod type Animal [_] ::animal )
(defmethod type Person [_] ::person )

これは理にかなっていますか、それとももっと良い方法がありますか?

4

1 に答える 1

9

いいえ。レコードはJavaクラスです。multimethodsページに記載されているように:

クラスを子として使用することもできます(ただし、親ではなく、クラスの子にする唯一の方法はJava継承を使用することです)。

レコードを使用してクラスを拡張することはできませんが、インターフェースを実装することはできます。インターフェイスを使用してJavaクラス階層で再生すると、何かを機能させることができる場合があります。

于 2011-01-03T17:49:15.523 に答える