任何客户都可以在CLOS中解释'老虎机'吗?我发现很难理解插槽名称后面的部分.那是在:
(defclass foo()(data1:initarg foo))
'initarg'和其他类似的东西意味着什么?我正在重读手册.所以,如果你们中的任何一个人能像我一样向外行解释,我真的很感激.
谢谢!
你的例子有点不对劲.它一定要是:
(defclass foo () ((data1 :initarg foo)))
请注意添加的括号以指示插槽描述列表.
DEFCLASS获取一个插槽列表.所以我们有两个插槽:
(defclass foo () ((data1 :initarg :data1arg :initform (random 1.0) :type number :documentation "doc here" :accessor foo-data1-acc) (data2 :initarg :data2arg)))
DATA1是插槽的名称.在后面你可以找到成对的关键字值.
:INITARG告诉你MAKE-INSTANCE的参数是什么.(make-instance'foo:data1arg 10); 创建对象并将插槽data1设置为10.通常您应该使用关键字符号(如:data1arg here).
:INITFORM在创建对象时默认设置插槽.喜欢在:(make-instance'foo); 创建对象.插槽设置为initform的值.
:TYPE指定插槽对象的类型.
:DOCUMENTATION只是一个字符串,以及文档.
:ACCESSOR指定读取和写入插槽的功能.
(foo-data1-acc some-foo-object-here) ; read (setf (foo-data1-acc some-foo-object-here) 7) ; write
请注意,您可以按任何顺序编写对,也可以指定多个访问者函数.还有:READER和:WRITER功能.
使用CLOS,您可以指定DEFCLASS宏中的所有内容.这些东西不会像defstruct一样自动生成,defstruct的符号较短.
DEFCLASS的描述如下:DEFCLASS. 简短的CLOS简介.