问题标签 [clojure.spec]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
220 浏览

clojure - 数字?不能在规范中使用

spec/and在 Clojure 1.9.0-alpha13 中,我可以使用andinteger?但不是andand来定义规范谓词number?,它会出现。这令人费解。令人费解的是,当我定义谓词时没有错误,但只有当我尝试使用它定义规范时。

为什么我在第二种情况下得到错误,而不是第一种?这是一个涉及我不知道的区别的功能,还是一个错误?

请注意,如果我直接定义没有错误::bar

0 投票
1 回答
1012 浏览

clojure - 地图及其值的 clojure 规范

我正在使用 Clojure 来实现(书面)标准文档。总的来说,我对 Clojure 允许我编写符合标准不同部分的代码的方式感到满意。着眼于未来,我正在尝试clojure.spec为它写一个。在文档中,他们定义了具有命名字段的各种结构化数据元素。然而,不同结构中的字段具有相同的名称,例如“red”结构有一个“value”字段,它是一个字符串,但“blue”结构有一个“value”字段,它是一个整数。在编写规范时我该如何处理?

据我了解,官方建议是命名键在任何地方都应该具有相同的语义。

我应该如何处理这个?我可以称它们为“红色值”和“蓝色值”,但这使得代码和标准之间的对应关系不太清楚。我可以将每个结构都放在自己的命名空间中吗?

0 投票
1 回答
150 浏览

clojure - clojure:如何将命名空间作为宏参数传递?

我正在试验 clojure.spec,我想我会写一个宏来节省一些繁琐的打字:-)

我正在尝试这样做:

我已经尝试了几个版本,但我无法使命名空间替换工作。有任何想法吗?不用说,宏不是我的强项。

0 投票
2 回答
962 浏览

clojure - Clojure.spec - 为什么有用以及何时使用

我最近在 Cojure Conj 2016 上观看了 Rich Hickeys 的演讲,虽然这很有趣,但我并不真正理解其中的意义clojure.spec或何时使用它。似乎大多数想法,例如符合、有效等,在 Clojure 中已经具有类似的功能。

我现在才学习 clojure 大约 3 个月,所以这可能是由于缺乏编程/Clojure 经验。

clojure.spec 和 cljs.spec 的工作方式与 Clojure 和 Cljs 相似,尽管它们不是 100% 相同,但它们基于相同的基本原理。

0 投票
2 回答
1042 浏览

clojure - Java 对象的 clojure.spec 自定义生成器

我刚刚在 clojure.spec 上看到了Rich 的演讲之一,我真的很想在我的项目中试一试。我正在编写一系列使用eclipse CDT 库解析 C 代码的工具,并且我想指定我的函数接受和发出 AST 对象。

我认为可以为一个函数编写一个非常基本的规范,该函数采用 AST 的根并发出所有树的叶子,如下所示:

但是,当我尝试执行代码时(s/exercise leaves),出现错误:

如何为 Java 对象编写自定义生成器以完全规范和练习我的代码?

0 投票
2 回答
191 浏览

clojure - 键*/具有内联值规范的键

我想用keys/编写一个规范,keys*但能够内联值规范,这是design 不支持的,我得到了它背后的原因。但是,当地图有特定上下文时,有时您确实希望(或只是通过旧版或第 3 方)键和值之间的耦合。

我对规范还是陌生的,这只是我第一次将它与现有项目集成,它不断给我带来问题,因为它假设太多,特别是因为上面提到的原因。例如,想象一个描述时间段并有一个until日期键的映射,在同一个 ns 中,有一个用于列表处理的映射,还有一个until带有谓词函数的映射。我现在需要为甚至不存在的命名空间手动编写完全命名空间的键(aliasing 很可爱,但它必须在多个命名空间/文件中不断复制)。除了烦人之外,我觉得它也容易出错。

另一个keys/keys*假设太多的地方是我什至想要关键字作为我的键。我现在正在为非程序员但技术用户编写 DSL,底线是我想指定一个带有符号作为键的映射。这似乎不受任何支持。

有什么我没有得到的吗?还是规范真的缺少基本功能?

0 投票
2 回答
94 浏览

testing - How can I find out why giving the wrong spec doesn't cause a blowup in my tests?

Parts of my system are specced out really well, but when I change one of the predicates to be something obviously wrong I noticed all my tests still pass and I don't get the usual blowup from spec I've come to rely on.

I can't figure out why this is happening, and I certainly can't reproduce it starting from lein new test.

Is there a way I can get spec.test to give me a warning when it can't find a spec, for debug purposes, rather than assuming I didn't want to spec out this part of my system? Can it perhaps help me in some other way with debugging this situation?

0 投票
1 回答
221 浏览

clojure - 使用 clojure.spec 值进行元编程?

我一直在尝试 clojure.spec,关于如何使用它的一个想法是生成用于编辑我指定的地图实例的 UI。例如,它可能会为指定为日期的键生成一个带有日期选择器字段的 Web 表单,诸如此类。

库中有一种get-spec方法,但似乎没有以我需要的方式对规范即值进行操作的函数。有没有办法做一些事情,比如获取地图规范并将该地图所需的键作为向量取回?这种元编程的规范是否超出了 clojure.spec 的预期用例?

0 投票
1 回答
110 浏览

clojure - 符合规范 / AST 的规范

我有一个 DSL 规范,它是一个像往常一样的序列 ( cat)。我想利用规范的解析(即conforming)来获得符合我的 DSL 的表达式的 AST。例如

现在它已经被解析并且我有了我的 AST,我想用它做一些有趣的事情,所以我想测试它等等。所以现在我需要为那个 AST 编写一个规范,这基本上是在复制所有内容。实际上它比这更糟糕,因为现在我必须s/def规范我以前不需要的谓词,因为正如文档keys所说:“设计上不支持内联值规范。” /“规范的(强制)意见是,与命名空间关键字相关的值的规范,如:my.ns/k,应该在该关键字本身下注册..”。所以复制(省略person-sym部分):

现在它似乎是兼容的:

在实践中,我当然有更复杂的数据,不知道该怎么办?AFAIK 规范没有给我它创建的 AST 的规范(实际上我个人认为这是它应该做的事情)。有什么建议么?

0 投票
3 回答
1103 浏览

clojure - clojure spec: map containing either a :with or a :height (XOR)

The following clojure spec ::my permits maps having either the key :width or the key :height, however it does not permit having both of them:

Even if it does the job:

the code does not appear that concise to me. First the keys are defined as optional and then as required. Does anyone have a more readable solution to this?