Common Lisp中的常规做法是在加载/编译时将选项传递给库

时间:2019-09-17 15:50:22

标签: common-lisp

背景

我正在编写一个包含阅读器宏的Common Lisp库。 现在让我担心的是,我的阅读器宏可能会覆盖具有相同调度宏字符的现有宏。为避免这种冲突,我想为用户提供某种方式来控制是否应从库外部定义我的阅读器宏。

特殊变量*features*似乎可以达到目的,请进行评估

(push :some-suppression-flag *features*)

在加载库之前和

#-some-suppression-flag (set-dispatch-macro-character ...)

在库中。

我知道Named Readtables可以解决“全局可读取问题”,但是我不想使用它来使我的库几乎没有依赖项。

问题

以上使用*features*的方式是否是在加载/编译时将某些选项传递给库的好方法? 还是有通常的做法?

1 个答案:

答案 0 :(得分:4)

只需提供一个用户可以调用的功能:

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

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