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

欢迎!请访问关于页面了解该机制的更多信息。

+3
Spec
编辑

我正在尝试将可追溯性实现到我的spec中。
(在这里,“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类型的支持,但这基本上是最常见的请求之一,特别是与文档字符串支持相关,所以我们将在spec 2中考虑这个问题。

现在最好的解决方案可能就是创建自己的基于spec名称键的第二级注册表,并使用它来存放元数据映射。


编辑
感谢您这么快就回复,@alexmiller!
你能提供一个类似的实例吗?(或者类似你描述的内容。)
我虽然理解了大致思路,但不知道如何实现...
很抱歉,我手头没有现成的东西。我说的是注册表中持有一个映射(这正是规范注册表所做),从规范名称(关键字)到元数据。
还是感谢您,@alexmiller。我觉得我对您的想法有了更深入的理解。
...