【发布时间】:2014-06-06 21:03:05
【问题描述】:
在 Practical Common Lisp 章节 17. Object Reorientation: Classes 部分 Accessor Functions 中,我发现很难理解 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)是否返回类bank-account的可设置槽值customer-name,然后SETF使用该值将值设置为“Sally Sue”?(setf (customer-name my-account) "Sally Sue")真的在调用上面的函数吗?如上所述,
setf customer-name是一个函数吗?在上面的函数中是
customer-name在(setf customer-name)和'customer-name在body中指的是同一个东西?-
部分说明
第二个元素是一个符号,通常是用于访问 SETF 函数将设置的位置的函数的名称
如果是这样,那么当函数可用于访问该位置时,为什么还要在函数定义中使用
slot-value函数?
【问题讨论】:
标签: lisp common-lisp setf