为了定义一个类(对于实现类和对象的学校项目(,当我使用方法创建类时,我必须从提示符中给它们一个名称 def-class class-name parents ...
.
提示应该用CLASS-NAME
回复我,告诉我该类已保存为全局变量(类是参数列表(。
所以在代码中,我认为我应该写这样的东西:
(defun def-class (class-name parents slot-value)
(defparameter X (list '(class-name parents slot-value))))
其中 X 必须CLASS-NAME
。但是,如果我尝试编写变量的名称,则实际上会给我我在代码中编写的单词,就像它不识别X是一个变量一样,它应该对其进行评估以获取值。
目前还不清楚你想做什么。但有几点意见:
-
defparameter
通常是定义全局变量的顶级形式。它通常不在函数内部使用。要设置变量,请使用setf
或setq
。 -
defvar
和defparameter
引入的变量应写为*var*
而不是var
。这确保了它们不会与词法变量冲突。 -
引用的数据将不被评估。如果要基于计算值(如变量值(创建列表,请使用例如函数
list
。
法典:
(defun def-class (class-name parents slot-value)
(setf *x* (list (list class-name parents slot-value))))
(defclass myclass ()
((slot-1 :initarg :slot-1 :accessor slot-1)
(slot-2 :initarg :slot-2 :accessor slot-2)))
;;#<STANDARD-CLASS MYCLASS>
(defparameter mc (make-instance 'myclass :slot-1 'a :slot-2 'b))
;; MC
(slot-1 mc)
;; A
(slot-2 mc)
;; B