(use-modules (oop goops))
(define-method (slot-fset (self <object>) slot-name value)
"Return a new copy of SELF, with all slots preserved except SLOT-NAME
set to VALUE."
(let* ((class (class-of self))
(clone (allocate-instance class '()))
(slots (map slot-definition-name
(class-slots class))))
(for-each (lambda (slot)
(if (and (slot-bound? self slot) (not (eq? slot slot-name)))
(slot-set! clone slot (slot-ref self slot))))
slots)
(slot-set! clone slot-name value)
clone))
(use-modules (oop goops))
(define-method (slot-fset (self <object>) slot-name value)
"Return a new copy of SELF, with all slots preserved except SLOT-NAME
set to VALUE."
(let* ((class (class-of self))
(clone (allocate-instance class '())))
(for-each (lambda (slot)
(define slot-n
(slot-definition-name slot))
(if (and (slot-bound? self slot-n) (not (eq? slot-n slot-name)))
(slot-set! clone slot-n (slot-ref self slot-n))))
(class-slots class))
(slot-set! clone slot-name value)
clone))
(use-modules (oop goops))
(define-method (slot-fset (self <object>) slot-name value)
"Return a new copy of SELF, with all slots preserved except SLOT-NAME
set to VALUE."
(let* ((class (class-of self))
(clone (allocate-instance class '())))
(for-each (lambda (slot)
(define slot-n
(slot-definition-name slot))
(if (and (not (eq? slot-n slot-name)) (slot-bound? self slot-n))
(slot-set! clone slot-n (slot-ref self slot-n))))
(class-slots class))
(slot-set! clone slot-name value)
clone))