1

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

(setf (accessor class) value)

我为此写了一个小函数:

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

我在 for 循环中使用它,在其中我正在遍历 2 个列表(槽(符号列表)和值(数字列表)),并希望将实例的多个槽设置为值。

(loop for slot in slots for value in values do
      (set-class-slots <myclass> slot value)
      )

我得到的错误是:

“未定义的运算符(setf 插槽)形式为((setf 插槽)#:|Store-Var-773597|#:g773598。”

我认为问题在于我的函数中的 setf 没有使用为输入 arg 提供的值。'slot' 但读取 'slot' 作为运算符。

我尝试了不同的东西,符号函数,函数调用等,但不知道该怎么做——因为我也不太明白出了什么问题。

任何帮助将不胜感激。

谢谢,马利诺

4

1 回答 1

3

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

(defun set-class-slots (class slot value)
    (funcall (fdefinition `(setf ,slot)) value class))
于 2015-04-25T00:34:28.560 回答