当前位置:  开发笔记 > 编程语言 > 正文

CLOS中的插槽

如何解决《CLOS中的插槽》经验,为你挑选了1个好方法。

任何客户都可以在CLOS中解释'老虎机'吗?我发现很难理解插槽名称后面的部分.那是在:

(defclass foo()(data1:initarg foo))

'initarg'和其他类似的东西意味着什么?我正在重读手册.所以,如果你们中的任何一个人能像我一样向外行解释,我真的很感激.

谢谢!



1> Rainer Joswi..:

你的例子有点不对劲.它一定要是:

(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简介.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有