我想知道在 Common Lisp 中销毁通过 defstruct
创建的结构的选项是什么。似乎自动提供了构造函数;但是,析构函数并非如此。
从内存中“清除”结构的方法有哪些?我想到了 (setq my-struct NIL)
之类的东西,但我不确定这是否是最简洁的方法?
编辑:
当我尝试测试如果我使用结构作为键将某些内容键入哈希表然后销毁该结构时会发生什么,问题就出现了。哈希表中的键会发生什么变化?我想这更多的是关于如何实现哈希表的问题。
最佳答案
由于 Common Lisp 是一种动态语言,垃圾收集器将在不再使用(在任何地方引用)时从内存中删除结构。所以是的,当您为结构分配一个名称(即 my-struct
),然后将 nil 分配给该名称时,结构将从内存中删除。
当你使用这个结构也作为键时,它多了一个引用,所以即使你将nil分配给my-struct
,结构也会保留在内存中直到您将其从哈希表中删除。
值得注意的是,make-hash-table
还采用可选的 test
参数:
test---a designator for one of the functions eq, eql, equal, or equalp. The default is eql. http://www.lispworks.com/documentation/HyperSpec/Body/f_mk_has.htm
当您使用结构作为键时,您应该将test
设置为equalp
。
关于data-structures - 在 Common Lisp 中销毁结构或类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52374371/