在你的想法中分享,参加2024年Clojure状态调查!

欢迎!请参阅关于页面获取更多关于此工作的信息。

+1
Clojure
已关闭

在一个项目中,我需要并像这样重命名clojure.alpha.spec

(ns example.core
    (:require [clojure.alpha.spec :as spec]))

然后我试图定义一个简单的规范如

(spec/def ::example-spec #(not (neg? %)))

编译时出现“未定义命名空间s”的错误。

我相信这是由于clojure.alpha.spec/def中的错别字。在文件spec-alpha2/src/main/clojure/clojure/alpha/spec.clj的第456行,有一个后引号s/spec,但文件顶部的别名是到sa。这里是第456行

    (#{'fn 'fn* `c/fn} op) `(s/spec ~explicated-form)

将行更改为

(#{'fn 'fn* `c/fn} op) `(sa/spec ~explicated-form)

我的spec/def工作成功。

备注:已关闭

1 个回答

+1

选定
 
最佳答案

是的,这绝对是错误的。建议的修复方法也不正确 - sa别名引用的是旧的spec.alpha(而不是此alpha.spec),并且曾经被用来以与spec 1相匹配的方式来执行错误报告。只需要完全取消该别名即可。已在master中修复。

...