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

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

+3
Spec
编辑

我正尝试将可追溯性实现到我的spec中。
(我特指《s/def》和《s/fdef》块中的"spec"。)

最初,我想到使用元数据来实现此目的。然而,这很遗憾地是不可能的:以下代码导致语法错误...(《元数据只能应用于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!
您能否提供一个这样的示例?_(或者类似您所描述的东西。)_{_x001F}_
虽然我明白了大致的想法,但不知如何实现它...
抱歉没有现成的。我仅仅是指一个包含映射的单元(这也是规范注册表所做的),从规范名称(关键字)到元数据。
无论如何,感谢您的回答,@alexmiller。我现在对您的想法有了更深的理解。
...