任何客户都可以在CLOS中解释'老虎机'吗?我发现很难理解插槽名称后面的部分.那是在:
(defclass foo()(data1:initarg foo))
'initarg'和其他类似的东西意味着什么?我正在重读手册.所以,如果你们中的任何一个人能像我一样向外行解释,我真的很感激.
谢谢!
你的例子有点不对劲.它一定要是:
(defclass foo ()
((data1 :initarg foo)))
Run Code Online (Sandbox Code Playgroud)
请注意添加的括号以指示插槽描述列表.
DEFCLASS获取一个插槽列表.所以我们有两个插槽:
(defclass foo ()
((data1 :initarg :data1arg
:initform (random 1.0)
:type number
:documentation "doc here"
:accessor foo-data1-acc)
(data2 :initarg :data2arg)))
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
请注意,您可以按任何顺序编写对,也可以指定多个访问者函数.还有:READER和:WRITER功能.
使用CLOS,您可以指定DEFCLASS宏中的所有内容.这些东西不会像defstruct一样自动生成,defstruct的符号较短.
DEFCLASS的描述如下:DEFCLASS. 简短的CLOS简介.
| 归档时间: |
|
| 查看次数: |
791 次 |
| 最近记录: |