В главе Practical Common Lisp 17. Переориентация объектов: классы раздел Функции доступа, мне было трудно понять, как расширяется SETF
.
Функции:
(defun (setf customer-name) (name account)
(setf (slot-value account 'customer-name) name))
bank-account
определение класса:
(defclass bank-account ()
((customer-name
:initarg :customer-name
:initform (error "Must supply a customer name."))
(balance
:initarg :balance
:initform 0)
(account-number
:initform (incf *account-numbers*))
account-type))
Что я не понимаю:
в выражении
(setf (customer-name my-account) "Sally Sue")
возвращает ли(customer-name my-account)
значение слота SETFablecustomer-name
классаbank-account
, которое затемSETF
использует для установки значения «Салли Сью»?действительно ли
(setf (customer-name my-account) "Sally Sue")
вызывает функцию выше?как определено выше, является ли
setf customer-name
функцией?в приведенной выше функции
customer-name
в(setf customer-name)
и'customer-name
в теле относятся к одному и тому же?- #P9# <блочная цитата> #P10# блочная цитата> #P11#