请分享您的想法,参加2024 年 Clojure 状态调查!

欢迎!请参阅关于页面以了解更多有关此功能的信息。

+3
Spec
编辑

我正在尝试将可追溯性纳入我的 specs 中。
(当我说“specs”时,我指的是 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 个答案

+2

目前还没有一种方法可以为所有 spec 类型做到这一点,但这是带文档字符串支持的基本要求,所以我们将在 spec 2 中考虑这个问题。

目前最佳的解决方案可能是创建自己的名为 spec 名称的次要注册表,并使用该注册表来存储元数据映射。


编辑了
感谢你的快速回复,@alexmiller!
你知道关于这方面的一个示例吗?(或者类似于你描述的那样。)
虽然我理解这个大概意思,但不知道如何实施...
抱歉,我没有现成的。说到注册表,我指的是一个持有映射的原子(这正好是规范注册表),从规范名称(关键字)到元数据的映射。
无论如何,感谢你,@alexmiller。我觉得我现在对你这个想法的理解更深了。
...