Warning: This is the manual of the legacy Guile 2.2 series. You may want to read the manual of the current stable series instead.

Previous: , Up: Introspection   [Contents][Index]


8.8.5 Accessing Slots

Any slot, regardless of its allocation, can be queried, referenced and set using the following four primitive procedures.

primitive procedure: slot-exists? obj slot-name

Return #t if obj has a slot with name slot-name, otherwise #f.

primitive procedure: slot-bound? obj slot-name

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).

primitive procedure: slot-ref obj slot-name

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).

primitive procedure: slot-set! obj slot-name value

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.

primitive procedure: slot-exists-using-class? class obj slot-name

Return #t if class has a slot definition for a slot with name slot-name, otherwise #f.

primitive procedure: slot-bound-using-class? class obj slot-name

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).

primitive procedure: slot-ref-using-class class obj slot-name

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).

primitive procedure: slot-set-using-class! class obj slot-name value

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.

procedure: class-slot-ref class slot-name

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.

procedure: class-slot-set! class slot-name value

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.

generic: slot-missing
method: slot-missing (class <class>) slot-name
method: slot-missing (class <class>) (object <object>) slot-name
method: slot-missing (class <class>) (object <object>) slot-name value

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.

generic: slot-unbound
method: slot-unbound (object <object>)
method: slot-unbound (class <class>) slot-name
method: slot-unbound (class <class>) (object <object>) slot-name

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.


Previous: , Up: Introspection   [Contents][Index]