common-lisp - Common Lisp 中在加载/编译时将选项传递给库的常见做法
问题描述
背景
我正在编写一个包含阅读器宏的 Common Lisp 库。现在我担心我的阅读器宏可能会覆盖现有的具有相同调度宏字符的宏。为了避免这种冲突,我想为用户提供一些方法来控制是否应该从库外部定义我的阅读器宏。
特殊变量*features*
似乎可以达到这个目的,评估
(push :some-suppression-flag *features*)
在加载库之前和
#-some-suppression-flag (set-dispatch-macro-character ...)
在图书馆。
我知道Named Readtables可以解决“全局可读问题”,但我不想用它来使我的库几乎没有依赖关系。
问题
上述方法是否使用*features*
一种很好的方式在加载/编译时将一些选项传递给库?还是有这样做的常见做法?
解决方案
只需提供一个用户可以调用的函数:
(defun enable-foo-syntax (&optional (enabled-p t))
...)
(enable-foo-syntax t) ; on
(enable-foo-syntax nil) ; off
推荐阅读
- image-processing - Hessian 矩阵,如何将 Ixx 和 Iyy 结合在一起?
- java - Gradle 子项目依赖项不起作用,但相同的依赖项在主 gradle 中工作正常
- laravel-5 - laravel / 如何将随机数与请求一起存储在数据库中
- sql - 如何将链接服务器中对特定列具有非空值的所有记录选择到本地数据库中
- django - 选择正确的 Django 删除视图方法
- node.js - 试图让 emscripten 在电子领域工作
- ios - self.view.bounds.maxY 只能在 viewDidLoad() 之外工作
- amazon-cloudwatch - 如何使用 ispresent() 函数过滤 CloudWatch Log Insights
- c# - 分层线程结构(线程中的线程)
- javascript - 当级别在数组中给出时转换对象列表