with-slots-read-only
Das Macro with-slots-read-only ist eine Variante von with-slots. Es erwartet drei Argumente. Nur das erste Argument wird nicht ausgewertet. Das erste Argument ist eine Liste von Namen von Instanzvariablen. Das zweite Argument ist eine Instanz. Das dritte Argument ist ein Ausdruck, der innerhalb einer Umgebung ausgewertet wird, in der die Namen der Instanzvariablen ihrem Wert in der Instanz zugeordnet sind.
Werden diese Werte geändert, werden die Änderungen nicht in die Instanz übernommen. Das ist der Unterschied zur Funktionsweise von with-slots, das Änderungen in die Instanzvariablen übernimmt.
Das Macro with-slots-read-only basiert im Wesentlichen auf let und slot-value:
(setq with-slots-read-only
(mlambda args
(let
((slots (first args))
(instance (second args)))
(list
let
(map-with
(lambda (slot)
(list
slot
(list
slot-value
instance
(list quote slot))))
slots)
(third args)))))
Werden diese Werte geändert, werden die Änderungen nicht in die Instanz übernommen. Das ist der Unterschied zur Funktionsweise von with-slots, das Änderungen in die Instanzvariablen übernimmt.
Das Macro with-slots-read-only basiert im Wesentlichen auf let und slot-value:
(setq with-slots-read-only
(mlambda args
(let
((slots (first args))
(instance (second args)))
(list
let
(map-with
(lambda (slot)
(list
slot
(list
slot-value
instance
(list quote slot))))
slots)
(third args)))))