CLOS:将符号转换为存取符

时间:2015-04-25 00:18:39

标签: common-lisp symbols accessor clos

我猜这是一个真正的初学者问题,但我无法在这里找到答案。 我的问题:我想像这样设置一个类的槽的值:

TopSecret.class

我为此写了一个小函数:

(setf (accessor class) value)

我在for循环中使用它,我在其中迭代2个列表(插槽(符号列表)和值(数字列表))并且想要设置几个插槽值的实例。

(defun set-class-slots (class slot value)
      (setf (slot class) value))

我得到的错误是:

"表格中未定义的运算符(setf slot)((setf slot)#:| Store-Var-773597 |#:g773598。"

我认为问题是我的函数中的setf没有使用为输入arg提供的值。 '槽'但阅读' slot'作为运营商。

我尝试了不同的东西,符号功能,功能等,但不知道该怎么做 - 因为我也不太了解出了什么问题。

非常感谢任何帮助。

谢谢, Marleynoe

1 个答案:

答案 0 :(得分:3)

您可以使用FDEFINITION获取(setf XXX)函数的函数值:

(defun set-class-slots (class slot value)
    (funcall (fdefinition `(setf ,slot)) value class))