Common lisp Common Lisp中的常见做法是在加载/编译时将选项传递给库 出身背景

Common lisp Common Lisp中的常见做法是在加载/编译时将选项传递给库 出身背景,common-lisp,Common Lisp,我正在编写一个包含reader宏的公共Lisp库。 现在我担心我的读卡器宏可能会覆盖具有相同分派宏字符的现有宏。为了避免这种冲突,我想为用户提供一些方法来控制是否应该从库外部定义我的reader宏 特殊变量*features*似乎就是为了达到这一目的,对 (push :some-suppression-flag *features*) 在加载库和 #-some-suppression-flag (set-dispatch-macro-character ...) 在图书馆 我知道它可以解决“

我正在编写一个包含reader宏的公共Lisp库。 现在我担心我的读卡器宏可能会覆盖具有相同分派宏字符的现有宏。为了避免这种冲突,我想为用户提供一些方法来控制是否应该从库外部定义我的reader宏

特殊变量
*features*
似乎就是为了达到这一目的,对

(push :some-suppression-flag *features*)
在加载库和

#-some-suppression-flag (set-dispatch-macro-character ...)
在图书馆

我知道它可以解决“全局可读性问题”,但我不想用它来让我的库几乎没有依赖性

问题 上述使用
*功能*
的方法是在加载/编译时将一些选项传递给库的好方法吗?
或者有这样做的常见做法吗?

只需提供一个用户可以调用的函数:

(defun enable-foo-syntax (&optional (enabled-p t))
  ...)

(enable-foo-syntax t)    ; on
(enable-foo-syntax nil)  ; off

我有一个函数可以将读卡器宏安装到给定的可读表中。例如,请参阅FSet或SERIES。感谢您的评论。这些库似乎包含许多创建公共Lisp库的有用技术。我来看看。谢谢你的回答。这是简单和充分的!实际上,我想在默认情况下定义我的读卡器宏(不调用任何函数),因此我将采用一种策略在内部存储现有宏,并在用户调用函数停用我的读卡器宏时将其还原。(加载库后必须立即调用该函数。)如果有人知道更好的方法,请留下评论。