在使用 add-member 函数时,需要明确指定添加的成员变量的类型。同时,建议使用类型注释来指定变量的类型,以避免出现类型赋值异常的问题。
例如,以下代码示例为 add-member 函数添加成员变量 name 和 age,其中对变量类型进行了明确指定和注释:
(defstruct person
name
age)
(defvar p1 (make-person :name "John" :age 30))
(defun add-member (person member-name member-value)
(let ((type (type-of (getf p1 member-name))))
(setf (getf person member-name :type type) member-value)))
(add-member p1 'name "Doe") ; 正确的调用方式
(add-member p1 'age 40) ; 正确的调用方式
; 错误的调用方式
(add-member p1 'name 123) ; 类型赋值异常
通过显式指定变量的类型和使用类型注释,我们可以避免出现类型赋值异常的问题。