La clase java.lang.Class de Java tiene un método getDeclaredFields que devolverá todos los campos de una clase determinada. ¿Hay algo similar para Common Lisp? Me encontré con algunas funciones útiles, como describir, inspeccionar y escribir símbolos, después de leer, probando las instrucciones en Successful Lisp, Capítulo 10 (http://www.psg.com/~dlamkins/sl/chapter10.html). Pero ninguno de ellos hace lo que haceDeclaredFields.Introspección de clase en Common Lisp
11
A
Respuesta
11
Debe usar los slots de clase y/o los slots de clase directa (ambos son de CLOS Metaobject Protocol, MOP). class-slots devuelve todos los slots que están presentes en una clase dada, y class-direct-slots returns, todos los slots se declaran en la definición de clase.
Las diferentes implementaciones de lisp implementan MOP de forma ligeramente diferente; use el paquete closer-mop para tener una interfaz uniforme con MOP.
Ejemplo:
(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
Ejemplo:
(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
Creo que está buscando MetaObject Protocol for CL.
Cuestiones relacionadas
- 1. Secuencias en Common Lisp?
- 2. Webdevelopment en Common Lisp
- 3. Asociación en Common Lisp
- 4. Common Lisp a Lisp-n?
- 5. Predijo Common Lisp
- 6. Best Common Lisp IDE
- 7. Dibujando árboles en Common Lisp
- 8. Renombrando lambda en Common Lisp
- 9. División entera en Common Lisp?
- 10. Programación de Common Lisp Parallel
- 11. Especificadores de tipo Common Lisp
- 12. Ejercicios de Common Lisp/Problemas
- 13. Función de persistencia en Common Lisp
- 14. Uso de etiquetas en Common Lisp
- 15. Transposición de listas en Common Lisp
- 16. Eliminación de un tipo en Common Lisp
- 17. Almacenamiento de fechas en Common Lisp
- 18. Palabra clave programática Common Lisp
- 19. Common Lisp definición del paquete
- 20. ¿El mejor framework web en Common-Lisp?
- 21. Desenrolle/argumentos splat en Common Lisp
- 22. LET versus LET * en Common Lisp
- 23. Cómo implementar Multi-Threads en Common Lisp
- 24. Restablecer el estado en Common Lisp
- 25. raspando una tabla HTML en Common Lisp?
- 26. Common Lisp en Heroku con Hunchentoot?
- 27. ¿Qué hace | 5E | significa en Common Lisp?
- 28. Representational State Transfer (REST) en Common Lisp
- 29. Implementación del conjunto Mandelbrot en Common Lisp
- 30. definiendo setf-expanders en Common Lisp