Any slot, regardless of its allocation, can be queried, referenced and set using the following four primitive procedures.
Return #t
if obj has a slot with name slot-name,
otherwise #f
.
Return #t
if the slot named slot-name in obj has a
value, otherwise #f
.
slot-bound?
calls the generic function slot-missing
if
obj does not have a slot called slot-name (see slot-missing).
Return the value of the slot named slot-name in obj.
slot-ref
calls the generic function slot-missing
if
obj does not have a slot called slot-name (see slot-missing).
slot-ref
calls the generic function slot-unbound
if the
named slot in obj does not have a value (see slot-unbound).
Set the value of the slot named slot-name in obj to value.
slot-set!
calls the generic function slot-missing
if
obj does not have a slot called slot-name (see slot-missing).
GOOPS stores information about slots in classes. Internally,
all of these procedures work by looking up the slot definition for the
slot named slot-name in the class (class-of
obj)
, and then using the slot definition’s “getter” and
“setter” closures to get and set the slot value.
The next four procedures differ from the previous ones in that they take
the class as an explicit argument, rather than assuming
(class-of obj)
. Therefore they allow you to apply the
“getter” and “setter” closures of a slot definition in one class to
an instance of a different class.
Return #t
if class has a slot definition for a slot with
name slot-name, otherwise #f
.
Return #t
if applying slot-ref-using-class
to the same
arguments would call the generic function slot-unbound
, otherwise
#f
.
slot-bound-using-class?
calls the generic function
slot-missing
if class does not have a slot definition for a
slot called slot-name (see slot-missing).
Apply the “getter” closure for the slot named slot-name in class to obj, and return its result.
slot-ref-using-class
calls the generic function
slot-missing
if class does not have a slot definition for a
slot called slot-name (see slot-missing).
slot-ref-using-class
calls the generic function
slot-unbound
if the application of the “getter” closure to
obj returns an unbound value (see slot-unbound).
Apply the “setter” closure for the slot named slot-name in class to obj and value.
slot-set-using-class!
calls the generic function
slot-missing
if class does not have a slot definition for a
slot called slot-name (see slot-missing).
Slots whose allocation is per-class rather than per-instance can be referenced and set without needing to specify any particular instance.
Return the value of the slot named slot-name in class class.
The named slot must have #:class
or #:each-subclass
allocation (see allocation).
If there is no such slot with #:class
or #:each-subclass
allocation, class-slot-ref
calls the slot-missing
generic
function with arguments class and slot-name. Otherwise, if
the slot value is unbound, class-slot-ref
calls the
slot-unbound
generic function, with the same arguments.
Set the value of the slot named slot-name in class class to
value. The named slot must have #:class
or
#:each-subclass
allocation (see allocation).
If there is no such slot with #:class
or #:each-subclass
allocation, class-slot-ref
calls the slot-missing
generic
function with arguments class and slot-name.
When a slot-ref
or slot-set!
call specifies a non-existent
slot name, or tries to reference a slot whose value is unbound, GOOPS
calls one of the following generic functions.
When an application attempts to reference or set a class or instance
slot by name, and the slot name is invalid for the specified class
or object, GOOPS calls the slot-missing
generic function.
The default methods all call goops-error
with an appropriate
message.
When an application attempts to reference a class or instance slot, and
the slot’s value is unbound, GOOPS calls the slot-unbound
generic
function.
The default methods all call goops-error
with an appropriate
message.