(defclass schedule()
((day :accessor schedule-day :initarg :day)))
(setf october
(make-array '(31)
:element-type 'schedule
:initial-element
(make-instance 'schedule :day 0)))
(setq searcher (read))
(setf (schedule-day (aref october (- searcher 1))) searcher)
(dotimes (i 31)
(format t "-month:10 day:~S~%" (schedule-day (aref october i))))
这是我10月的计划程序的一部分。 这部分应该在我打字的那一天,改变那天的元素,并打印每个十月的时间表。无法修改对象数组中的特定元素
然而,
(setq searcher (read))
(setf (schedule-day (aref october (- searcher 1))) searcher)
我有这个烦恼。如果我输入17,那么只有october
17日应该受到影响,印像这样,
-month:10 day:0
-month:10 day:0
...
-month:10 day:17
-month:10 day:0
...
但是我真正得到的是
-month:10 day:17
-month:10 day:17
-month:10 day:17
...
为什么我不能只有一个元素改变?我能够做到这一点类似于C++,
october[searcher - 1].setDay(searcher);
看来setf
影响了类本身,而不是类对象。你可以帮我吗?谢谢。
请修复parens和indentation。您的代码现在无法阅读。 – sds
我认为现在可以吗?它只是一个类和一个make-array:p – user3026854
如果提供了初始元素,它将用于初始化新数组中的每个元素(使用与你相同的对象) – FrankS101