请在 2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!有关如何使用本网站的更多信息,请参阅 关于 页面。

+3
规范
编辑

我正在尝试将可追溯性集成到我的规范中。
(这里的 "规范" 专指 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})

我能想到的另一种方法是在文件中将其作为 "守护者" 元素附加元数据(比如说,一个 def

但这看起来相当糟糕...

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

有人知道我如何实现这一点的方法吗?

答案数量:

+2

目前还没有一种方法可以用于所有类型的规范,但这是文档字符串支持中最频繁的请求,所以我们将会在 spec 2 中考虑这个问题。

目前最好的解决方案可能是创建自己的基于规范名称的辅助注册表,并使用它来存储元数据映射。

感谢你的快速回复,@alexmiller!
你知道一个相关示例吗?(或者说类似于你描述的内容。)
虽然我理解了这个大致的概念,但我不知道如何实现...
抱歉没有现成的。所谓注册表,我指的是一个持有映射的原子(这正是规格注册表所做的事情),从规格名(关键字)到元数据。
无论如何,感谢,@alexmiller。我认为我现在对你的想法有了更深入的理解。
...