Plaster
New
List
Login
common-lisp
default
anonymous
2022.05.21 15:15:17
(defmacro with-internal-slots ((&rest slot-names) object class-or-package &body body) "Like ‘with-slots’ but using the package internal slot names. If ‘class-or-package’ is a keyword, assume it's a package designator, otherwise assume it's a class name whose symbol-package we use." (let ((package (if (keywordp class-or-package) class-or-package (symbol-package class-or-package)))) `(with-slots (,@(mapcar (lambda (x) (list x (intern (symbol-name x) package))) slot-names)) ,object ,@body))) (defmacro with-internal-accessors ((&rest slot-names) object class-or-package &body body) "Like ‘with-accessors’ but using package internal accessor names. If ‘class-or-package’ is a keyword, assume it's a package designator, otherwise assume it's a class name whose symbol-package we use." (let ((package (if (keywordp class-or-package) class-or-package (symbol-package class-or-package)))) `(with-accessors (,@(mapcar (lambda (x) (list x (intern (symbol-name x) package))) slot-names)) ,object ,@body)))
Raw
Annotate
Repaste
Edit