我想从我正在创建的包中定义一个名为“defun”的宏,我想将它导出以在某些地方使用。有一个名为 parenscript 的库可以在它的包中执行此操作,如下所示,
(export #:defun)
当我尝试在我自己的包中执行此操作时,我收到此 SBCL 错误
Lock on package COMMON-LISP violated when defining DEFUN as a macro while in package COMMON-LISP-USER.
parenscript 库中是如何完成的?我知道您可以输入表格;
(ps (defun function-name (args) (body)))
我想做同样的事情,但不知道如何做?
最佳答案
您想隐藏 CL 包中的原始符号。
CL-USER 1 > (defpackage "MY-PACKAGE" (:use "CL"))
#<The MY-PACKAGE package, 0/16 internal, 0/16 external>
CL-USER 2 > (in-package "MY-PACKAGE")
#<The MY-PACKAGE package, 0/16 internal, 0/16 external>
MY-PACKAGE 3 > (shadow 'defun)
T
MY-PACKAGE 4 > (cl:defun defun () :my-defun-returns)
DEFUN
MY-PACKAGE 5 > (defun)
:MY-DEFUN-RETURNS
MY-PACKAGE 6 > (export 'defun)
T
关于package - 在包中覆盖 "defun",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56416647/