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 Memory Issues
- 2. Common Lisp用ベクターグラフィックスライブラリ
- 3. ステップEval Common Lisp
- 4. ソースコードlisp(Common Lisp、Scheme、Clojure)の美人
- 5. Common Lisp let関数
- 6. Common Lispラムダ式エラー
- 7. Common Lisp Unbound変数
- 8. common lisp function/macro aliases
- 9. Common Lisp vs. MacLisp/InterLisp
- 10. Common Lisp並列プログラミング
- 11. Common Lispグラフィカルユーザインタフェース開発
- 12. Common Lisp:ディレクトリの作成
- 13. Common Lisp用のレクサーとパーサージェネレータ
- 14. Common Lispのパッケージ定義
- 15. Common Lispでの循環リスト
- 16. Common Lisp CFFI:ポインタへのポインタ
- 17. Common LispのComparable(Rankable/Sortable)enums
- 18. Common Lisp `format`の実装
- 19. Common LispのPython enumerate()analog
- 20. Common Lispの豊富なプログラミング?
- 21. Common LispのWeb開発
- 22. Common Lispの統計パッケージ
- 23. Common LispのRepresentational State Transfer(REST)
- 24. Common Lispの認証ライブラリ
- 25. Common Lispパッケージとモジュール管理
- 26. Common LispとSchemeの間の相違点
- 27. Common Lispでのラベルの使用
- 28. Common Lispの依存関係の管理
- 29. Common Lispでの文字列の比較
- 30. Common Lispでの条件ハンドラのインストール