首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CLOS中的插槽

CLOS中的插槽
EN

Stack Overflow用户
提问于 2009-03-10 10:40:47
回答 1查看 819关注 0票数 6

有谁能解释一下CLOS中的“插槽”吗?我发现很难理解插槽名称后面的部分。这是在:

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

'initarg‘和其他类似的东西是什么意思?我正在重读手册。所以,如果在座的各位能向我这样的门外汉解释一下,我将不胜感激。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-03-10 12:21:36

你的例子有点错误。它必须是:

代码语言:javascript
复制
(defclass foo ()
   ((data1 :initarg foo)))

请注意,添加的圆括号用于指示插槽描述列表。

DEFCLASS接受插槽列表。所以我们有两个插槽:

代码语言:javascript
复制
(defclass foo ()
   ((data1 :initarg :data1arg
           :initform (random 1.0) 
           :type number
           :documentation "doc here"
           :accessor foo-data1-acc)
    (data2 :initarg :data2arg)))

DATA1是插槽的名称。在它后面,你可以找到成对的:keyword value。

:INITARG告诉您MAKE-INSTANCE的参数是什么。(make-instance 'foo :data1arg10);创建对象并将插槽data1设置为10。通常您应该使用关键字符号(如:data1arg )。

:INITFORM在创建对象时默认设置槽。如:(make-instance 'foo);创建对象。插槽设置为initform的值。

:TYPE指定槽对象的类型。

:DOCUMENTATION只是一个表示文档的字符串。

:ACCESSOR指定读取和写入插槽的函数。

代码语言:javascript
复制
(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的描述在这里:DEFCLASSShort CLOS Intro

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/629631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档