Javaのjava.lang.Classクラスには、指定されたクラスのすべてのフィールドを返すgetDeclaredFieldsメソッドがあります。 Common Lispに類似したものはありますか?私は、Successful Lisp、Chapter 10(http://www.psg.com/~dlamkins/sl/chapter10.html)の説明を読んだ後、説明、検査、シンボルplistなどの便利な機能を紹介しました。しかし、getDeclaredFieldsが行うことはありません。Common Lispのクラスイントロスペクション
11
A
答えて
11
クラススロットおよび/またはクラスダイレクトスロット(どちらもCLOS Metaobject Protocol、MOPからのものです)を使用する必要があります。 class-slotsは指定されたクラスに存在するすべてのスロットを返し、class-direct-slotsはすべてのスロットをクラス定義で宣言します。
異なるlisp実装では、MOPが少し異なります。 closer-mopパッケージを使用して、MOPへの統一されたインターフェイスを確保してください。
例:
(defclass foo()
(foo-x))
(finalize-inheritance (find-class 'foo)) ;this is needed to be able to query class slots and other properties. Or, class is automatically finalized when its first instance is created
(class-slots (find-class 'foo))
=> (#<STANDARD-EFFECTIVE-SLOT-DEFINITION FOO-X>)
(slot-definition-name (first (class-slots (find-class 'foo))))
=> FOO-X
例:
(defun inspect ((object standard-object))
(inspect-rec (class-slots (class-of object)) object))
(defun inspect-rec (slots o)
(if(atom slots)()
(let ((sn (slot-definition-name (car slots)))) (cons (list sn '=> (slot-value o sn)) (inspect-rec (cdr slots) o)))))
6
私はあなたがMetaObject Protocol for CLを探していると思います。
関連する問題
- 1. Common Lisp用ベクターグラフィックスライブラリ
- 2. Common Lisp並列プログラミング
- 3. Common Lispグラフィカルユーザインタフェース開発
- 4. Common Lisp vs. MacLisp/InterLisp
- 5. Common Lisp Unbound変数
- 6. ソースコードlisp(Common Lisp、Scheme、Clojure)の美人
- 7. Common Lispのパッケージ定義
- 8. Common LispのWeb開発
- 9. Common Lispの統計パッケージ
- 10. Common LispのRepresentational State Transfer(REST)
- 11. Common Lispでの循環リスト
- 12. Common Lisp CFFI:ポインタへのポインタ
- 13. Common Lisp用のレクサーとパーサージェネレータ
- 14. Common Lisp:ディレクトリの作成
- 15. Common Lispの豊富なプログラミング?
- 16. Common Lispでの条件ハンドラのインストール
- 17. Common LispとSchemeの間の相違点
- 18. Common Lispでの文字列の比較
- 19. Common Lispでのラベルの使用
- 20. Common Lispでの行列乗算
- 21. Clozure Common Lisp - TCPソケットプログラミング - 応答の送信
- 22. Common Lispでlambdaの名前を変更
- 23. Scheme/Common Lisp/Clojureの自動微分ライブラリ
- 24. Hunchentootを使ったHerokuのCommon Lisp?
- 25. Common Lispでのコンソール入出力
- 26. Common Lispの効率的なcollect関数
- 27. Common Lispダブルバッククォート、クォート解除、クォート、アンクォートシーケンス?
- 28. Common Lispで型を削除する
- 29. Common Lispで&restパラメータを展開する
- 30. Common Lispでリーダーマクロを管理する