2024 Clojure 状态调查! 分享你的想法。

欢迎!请在 关于 页面获取更多关于这个如何工作的小信息。

+3
Spec
编辑

我试图在我的规范中实现可追溯性。
(在这里,“规范”指的是 s/defs/fdef 块。)

最初,我想到用元数据来实现这个想法。然而,这很不可行:下面的代码会给我语法错误…(元数据只能应用于 IMetas。

(require
    '[clojure.spec.alpha :as s])
(s/def
      ^{:rule "205.3i"
        :version "2020.06.01"}
      ::basic-land-type #{::forest ::island ::mountain ::plains ::swamp})

我能想到的唯一其他方法是 somehow 将元数据作为一个“守护者”元素附加到文件中(比如说,一个 def

但是,它看起来相当难看…

(def
  ^{:rule "205.3i"
    :version "2020.06.01"}
  tracing-info "(see metadata)")

有人知道一些方法我可以用来实现这个目标吗?

2 个回答

+2

对于所有规范类型,目前还没有真正实现这个功能的方法,但对于文档字符串支持来说,这是最基本的请求,所以我们将它纳入 spec 2 的计划中。

目前最好的解决方案可能是创建一个自己的二级注册表,以规范名称为键,并使用它来保存元数据映射。


编辑
感谢您迅速的回答,@alexmiller!
您能提供一个描述这类情况的示例吗?_(或者类似您所描述的。)_)
尽管我理解了大致的概念,但我对如何实现它毫无头绪...
抱歉,我手头没有。我说的“注册表”只是一个包含地图(这正是规范注册表的功能)的原子,从规范名称(关键字)到元数据。
无论如何,感谢@alexmiller。我觉得我现在对您的想法有了更深的理解。
...