Common Lisp 是否提供了取消定义使用 deftype创建的类型的工具?
我在 Hyperspec 中没有找到任何关于它的内容。
我只是unintern
派生类型说明符:
T1> (deftype foo () 'fixnum)
FOO
T1> (let ((bar 1))
(check-type bar foo))
NIL
T1> (unintern 'foo)
T
T1> (let ((bar 1))
(check-type bar foo))
Unknown type specifier: FOO
[Condition of type SIMPLE-ERROR]
此外,如果您真的担心出于某种原因删除该类型的每个痕迹,您始终可以编写依赖于实现的代码来实现它,即使标准中未提及此类功能。例如,在 CCL 中(未经测试,我只是略读了相关代码):
(defun delete-type (derived-type-specifier)
(ccl::clear-type-cache)
(remhash derived-type-specifier ccl::%deftype-expanders%)
(setf (documentation derived-type-specifier 'type) nil))
现在我们开始:
T1> (deftype foo () "frob" 'fixnum)
FOO
T1> (documentation 'foo 'type)
"frob"
T1> (let ((bar 1))
(check-type bar foo))
NIL
T1> (delete-type 'foo)
NIL
T1> (documentation 'foo 'type)
NIL
T1> (let ((bar 1))
(check-type bar foo))
Unknown type specifier: FOO
[Condition of type SIMPLE-ERROR]