首页 > 解决方案 > Common Lisp 中在加载/编译时将选项传递给库的常见做法

问题描述

背景

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

特殊变量*features*似乎可以达到这个目的,评估

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

在加载库之前和

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

在图书馆。

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

问题

上述方法是否使用*features*一种很好的方式在加载/编译时将一些选项传递给库?还是有这样做的常见做法?

标签: common-lisp

解决方案


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

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

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

推荐阅读