Java'nın java.lang.Class sınıfı, belirli bir sınıftaki tüm alanları döndürecek bir getDeclaredFields yöntemine sahiptir. Common Lisp için benzer bir şey var mı? Successful Lisp, Bölüm 10 (http://www.psg.com/~dlamkins/sl/chapter10.html) belgesindeki talimatları denedikten sonra, betimleme, inceleme ve sembol-plist gibi bazı yardımcı fonksiyonlara rastladım. Ama hiçbiri, DeclaredFields'ın yaptıklarını yapmaz.Common Lisp'de sınıf iç gözlemi
11
A
cevap
11
Sınıf yuvalarını ve/veya sınıf doğrudan yuvalarını kullanmalısınız (her ikisi de CLOS Metaobject Protocol, MOP). sınıf yuvaları, verilen sınıfta bulunan tüm yuvaları döndürür ve sınıf doğrudan yuvaları, sınıf tanımında tüm yuvaların bildirildiğini döndürür.
Farklı lisp uygulamaları MOP'yi biraz farklı olarak uygular; MOP için tek tip arabirime sahip olmak için closer-mop paketini kullanın.
Örnek:
(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
Örnek:
(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
Sanırım MetaObject Protocol for CL'u arıyorsunuz.
İlgili konular
- 1. D: işlev parametre adı iç gözlemi
- 2. ? (İç sınıf ve Outter Sınıf)
- 3. Bir Matristen Ayıklama Gözlemi
- 4. Common Lisp
- 5. Python'da statik iç sınıf
- 6. Golang iç içe geçmiş işlevi iç sınıf
- 7. Dış sınıftan erişen iç sınıf
- 8. bir iç sınıf nesnesi Özetle
- 9. Bu bir İç Sınıf mı
- 10. Java'da boş anonim iç sınıf
- 11. Common Lisp (SBCL)
- 12. Common Lisp Timer
- 13. Bir sonraki gözlemi öngören Gizli Markov Modeli
- 14. Common Lisp Programatik Anahtar Kelime
- 15. Ek, Common Lisp'te nasıl çalışır?
- 16. Common Lisp'de bir tür silme
- 17. Bir iç sınıf bildirmeyi nasıl yönlendirebilirim?
- 18. Anonim İç Sınıf İçerisindeki İşaretli İstisnalar Atma
- 19. , FutureTask iç sınıf oluşturma işlemini derleyemiyor
- 20. Jackson Json Tür Eşleme İç Sınıf
- 21. Scala'da bir iç sınıf nasıl "geçersiz kılınır"?
- 22. Bir Java iç sınıfı için sınıf başvurusu
- 23. iç sınıf erişimi, aynı yöntem adları
- 24. Statik iç içe sınıf görünürlük sorunu
- 25. Özel iç sınıf, beklenmeyen anonim sınıfı sentezler
- 26. jQuery, li sınıf adı bulun (iç ortamdaki)
- 27. Scala'da bir iç sınıf türüne gönderme
- 28. Java Groovy iç/dış sınıf tutarsızlık vs
- 29. java.lang.NoSuchMethodError: com.google.common.collect.FluentIterable.toList() Lcom/google/common/collect/ImmutableList;
- 30. common-lisp: ciltleme ve sembol arasındaki fark