【问题标题】:Common practice in Common Lisp to pass options to a library at load/compile timeCommon Lisp 中在加载/编译时将选项传递给库的常见做法
【发布时间】:2019-09-18 02:33:34
【问题描述】:

背景

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

特殊变量*features* 似乎服务于这个目的,评估

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

在加载库之前和

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

在图书馆里。

我知道Named Readtables可以解决“全局可读问题”,但我不想用它来让我的库依赖很少。

问题

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

【问题讨论】:

  • 我有一个功能可以将阅读器宏安装到给定的 readtable 中。参见例如 FSet 或 SERIES。
  • 感谢您的评论。这些库似乎包含许多有用的技术来创建 Common Lisp 库。我去看看。

标签: common-lisp


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回答。简单又足够!实际上,我想默认定义我的阅读器宏(不调用任何函数),所以我将采用一种策略在内部存储现有的,并在用户调用函数来停用我的阅读器宏时恢复它。 (加载库后必须立即调用该函数。)如果有人知道更好的方法,请离开cmets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 2018-12-06
  • 2019-08-08
相关资源
最近更新 更多