package - 在包中覆盖 "defun"

标签 package lisp common-lisp symbols parenscript

我想从我正在创建的包中定义一个名为“defun”的宏,我想将它导出以在某些地方使用。有一个名为 parenscript 的库可以在它的包中执行此操作,如下所示,

(export #:defun)

当我尝试在我自己的包中执行此操作时,我收到此 SB​​CL 错误

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/

相关文章:

common-lisp - 如何在 Common Lisp ECL 中执行逐步调试?

function - 在 dolist 中扩展宏

python - 在 Python 中实现 lisp

java - 如何为不同的文件创建一个包?

java - 存储 Java 包

recursion - LISP 中的连接子列表在一个大列表中

lisp - 制作midi实例:midifile

lisp - 从 cl-user 包导入

c# - 将项目引用的 PDB 文件包含到 nuget 包中

具有大尺寸外部 Assets 的 R 包