问题标签 [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.
clojure - 数字?不能在规范中使用
spec/and
在 Clojure 1.9.0-alpha13 中,我可以使用andinteger?
但不是and
and来定义规范谓词number?
,它会出现。这令人费解。令人费解的是,当我定义谓词时没有错误,但只有当我尝试使用它定义规范时。
为什么我在第二种情况下得到错误,而不是第一种?这是一个涉及我不知道的区别的功能,还是一个错误?
请注意,如果我直接定义没有错误::bar
:
clojure - 地图及其值的 clojure 规范
我正在使用 Clojure 来实现(书面)标准文档。总的来说,我对 Clojure 允许我编写符合标准不同部分的代码的方式感到满意。着眼于未来,我正在尝试clojure.spec
为它写一个。在文档中,他们定义了具有命名字段的各种结构化数据元素。然而,不同结构中的字段具有相同的名称,例如“red”结构有一个“value”字段,它是一个字符串,但“blue”结构有一个“value”字段,它是一个整数。在编写规范时我该如何处理?
据我了解,官方建议是命名键在任何地方都应该具有相同的语义。
我应该如何处理这个?我可以称它们为“红色值”和“蓝色值”,但这使得代码和标准之间的对应关系不太清楚。我可以将每个结构都放在自己的命名空间中吗?
clojure - clojure:如何将命名空间作为宏参数传递?
我正在试验 clojure.spec,我想我会写一个宏来节省一些繁琐的打字:-)
我正在尝试这样做:
我已经尝试了几个版本,但我无法使命名空间替换工作。有任何想法吗?不用说,宏不是我的强项。
clojure - Clojure.spec - 为什么有用以及何时使用
我最近在 Cojure Conj 2016 上观看了 Rich Hickeys 的演讲,虽然这很有趣,但我并不真正理解其中的意义clojure.spec
或何时使用它。似乎大多数想法,例如符合、有效等,在 Clojure 中已经具有类似的功能。
我现在才学习 clojure 大约 3 个月,所以这可能是由于缺乏编程/Clojure 经验。
clojure.spec 和 cljs.spec 的工作方式与 Clojure 和 Cljs 相似,尽管它们不是 100% 相同,但它们基于相同的基本原理。
clojure - Java 对象的 clojure.spec 自定义生成器
我刚刚在 clojure.spec 上看到了Rich 的演讲之一,我真的很想在我的项目中试一试。我正在编写一系列使用eclipse CDT 库解析 C 代码的工具,并且我想指定我的函数接受和发出 AST 对象。
我认为可以为一个函数编写一个非常基本的规范,该函数采用 AST 的根并发出所有树的叶子,如下所示:
但是,当我尝试执行代码时(s/exercise leaves)
,出现错误:
如何为 Java 对象编写自定义生成器以完全规范和练习我的代码?
clojure - 键*/具有内联值规范的键
我想用keys
/编写一个规范,keys*
但能够内联值规范,这是design 不支持的,我得到了它背后的原因。但是,当地图有特定上下文时,有时您确实希望(或只是通过旧版或第 3 方)键和值之间的耦合。
我对规范还是陌生的,这只是我第一次将它与现有项目集成,它不断给我带来问题,因为它假设太多,特别是因为上面提到的原因。例如,想象一个描述时间段并有一个until
日期键的映射,在同一个 ns 中,有一个用于列表处理的映射,还有一个until
带有谓词函数的映射。我现在需要为甚至不存在的命名空间手动编写完全命名空间的键(alias
ing 很可爱,但它必须在多个命名空间/文件中不断复制)。除了烦人之外,我觉得它也容易出错。
另一个keys
/keys*
假设太多的地方是我什至想要关键字作为我的键。我现在正在为非程序员但技术用户编写 DSL,底线是我想指定一个带有符号作为键的映射。这似乎不受任何支持。
有什么我没有得到的吗?还是规范真的缺少基本功能?
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?
clojure - 使用 clojure.spec 值进行元编程?
我一直在尝试 clojure.spec,关于如何使用它的一个想法是生成用于编辑我指定的地图实例的 UI。例如,它可能会为指定为日期的键生成一个带有日期选择器字段的 Web 表单,诸如此类。
库中有一种get-spec
方法,但似乎没有以我需要的方式对规范即值进行操作的函数。有没有办法做一些事情,比如获取地图规范并将该地图所需的键作为向量取回?这种元编程的规范是否超出了 clojure.spec 的预期用例?
clojure - 符合规范 / AST 的规范
我有一个 DSL 规范,它是一个像往常一样的序列 ( cat
)。我想利用规范的解析(即conform
ing)来获得符合我的 DSL 的表达式的 AST。例如
现在它已经被解析并且我有了我的 AST,我想用它做一些有趣的事情,所以我想测试它等等。所以现在我需要为那个 AST 编写一个规范,这基本上是在复制所有内容。实际上它比这更糟糕,因为现在我必须s/def
规范我以前不需要的谓词,因为正如文档keys
所说:“设计上不支持内联值规范。” /“规范的(强制)意见是,与命名空间关键字相关的值的规范,如:my.ns/k,应该在该关键字本身下注册..”。所以复制(省略person-sym
部分):
现在它似乎是兼容的:
在实践中,我当然有更复杂的数据,不知道该怎么办?AFAIK 规范没有给我它创建的 AST 的规范(实际上我个人认为这是它应该做的事情)。有什么建议么?
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?