gpt4 book ai didi

oop - CLOS 中的插槽

转载 作者:行者123 更新时间:2023-12-04 14:21:28 24 4
gpt4 key购买 nike

任何 CL'er 都可以解释一下 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 是插槽的名称。在这之后你会发现成对的 :keyword 值。

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

: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 那样自动生成,它有一个较短的符号。

DEFCLASS 的描述在这里: DEFCLASS .
Short CLOS Intro .

关于oop - CLOS 中的插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/629631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com