作者:港1009 | 来源:互联网 | 2022-12-06 18:49
所以我想重新制作一个程序,该程序使用列表来包含对象并用数组替换列表.
我遇到了一个问题,我的对象属于同一个实例
(setq arr (make-array 3 :initial-element (make-instance 'object) :adjustable t :fill-pointer 3))
在此代码执行之后
数组中的所有对象都是相同的,解释器给了我这个
#(# # #)
我知道其他方法可以做到这一点,但我仍然想知道为什么会这样?
如果不是什么#意思作为一个整体是什么意思,这是一个什么样的内存地址?
1> Svante..:
(make-instance 'object)
在调用代码时,表单只会被评估一次.结果用作数组中每个元素的初始值.查看单数单词initial-element
(不是-elements
)可能会有所帮助,并且以运算符开头的运算符make-
通常是函数,因此在调用之前会对所有参数进行求值.
输出#
用于不可读的对象.这由#<
语法指示,该语法被定义为在尝试时发出错误信号read
(http://clhs.lisp.se/Body/02_dht.htm).它通常由生成print-unreadable-object
,通常在定义方法时使用print-object
.因此,确切的输出是实现或用户定义的(无论谁print-object
为该特定类编写方法).默认情况下,它最有可能包含类名称和类似内存引用或地址的内容.
为了完整起见,我喜欢使用map-into
:
(map-into (make-array 3 :adjustable t :fill-pointer 3)
(lambda () (make-instance 'object)))
获取使用不同对象初始化的数组.