Describes how the value of a class option is parsed.
clos
process-a-class-option metaclass option value => initargs
metaclass⇩ |
The metaclass of the class being parsed. |
option⇩ |
The defclass option name. |
value⇩ |
The tail of the defclass option form. |
initargs⇩ |
A plist of initargs describing the option. |
The generic function process-a-class-option
describes how the value of a class option is parsed. It is called at defclass macroexpansion time. By default LispWorks parses class options as defined in AMOP, but you need to supply a method if you need class options with different behavior.
metaclass is the metaclass of the class being parsed.
option is the option being parsed.
value is the value associated with option.
initargs should be a plist of class initargs and values. These are added to any other initargs for the class.
(defclass m1 (standard-class) ((title :initarg :title)))
For single-valued, evaluated title option, add a method like this:
(defmethod clos:process-a-class-option ((class m1) (name (eql :title)) value) (unless (and value (null (cdr value))) (error "m1 :title must have a single value.")) (list name (car value))) (defclass my-titled-class () () (:metaclass m1) (:title "Initial Title"))
If the value is not to be evaluated, the method would look like this:
(defmethod clos:process-a-class-option ((class m1) (name (eql :title)) value) (unless (and value (null (cdr value))) (error "m1 :title must have a single value.")) `(,name ',value))
Now suppose we want an option whose value is a list of titles:
(defclass m2 (standard-class) ((titles-list :initarg :list-of-possible-titles)))
If the titles are to be evaluated, add a method like this:
(defmethod clos:process-a-class-option ((class m2) (name (eql :list-of-possible-titles)) value) (list name `(list ,@value)))
Or, if the titles should not be evaluated, add a method like this:
(defmethod clos:process-a-class-option ((class m2) (name (eql :list-of-possible-titles)) value) (list name `',value)) (defclass my-multi-titled-class () () (:metaclass m2) (:list-of-possible-titles "Initial Title 1" "Initial Title 2"))
LispWorks® User Guide and Reference Manual - 01 Dec 2021 19:30:25