我想为地图创建一个clojure规范,其中包含有关特定键的存在的规则。
地图必须为:type
,并且可以包含:default
或:value
,但不能同时包含(s/def ::propertyDef
(s/keys :req [::type (s/or ::default ::value) ] :opt [::description ::required]))
或CompilerException java.lang.AssertionError: Assert failed:
spec/or expects k1 p1 k2 p2..., where ks are keywords
(c/and (even? (count key-pred-forms)) (every? keyword? keys)),
compiling:(C:\Users\MartinRoberts\AppData\Local\Temp\form-init4830956164341520551.clj:1:22)
。我试过了:
or
但我得到了
s/or
但是#include <string>
auto& make_entry(std::string& cell, int index)
{
cell += '(';
cell += char('A' + index);
cell += ')';
return cell;
}
int main()
{
std::string battlefield[10][1];
for (int i = 0; i < 10; i++){
make_entry(battlefield[i][0], i);
}
}
给了我一个错误,因为格式错误。我不得不承认在function berekeningAflostabel() {
var zaaksoortMsnp;
var AflostabelPerMaand;
document.getElementById("fldZaakSoortMsnp").addEventListener("change", function () {
AflostabelPerMaand = this.value;
if(AflostabelPerMaand == 1) {
zaaksoortMsnp = "Tekst1";
}
if(AflostabelPerMaand == 2) {
zaaksoortMsnp = "Tekst2";
}
if(AflostabelPerMaand == 3) {
zaaksoortMsnp = "Tekst3";
}
if(AflostabelPerMaand == 4) {
zaaksoortMsnp = "Tekst4";
}
if(AflostabelPerMaand == 5) {
zaaksoortMsnp = "Tekst5";
}
if(AflostabelPerMaand == 6) {
zaaksoortMsnp = "Tekst6";
}
document.getElementById("fldMinimaleAfloswaardePerMaand").value = zaaksoortMsnp;
}
}
var eventZaaksoortMsnp = document.getElementById("fldZaakSoortMsnp");
eventZaaksoortMsnp.addEventListener("change", berekeningAflostabel);
的文档中没有真正理解。
答案 0 :(得分:4)
首先:您使用s/or
在所需密钥列表中指定::default
或::value
。 s/or
需要:label spec
对,并且您只提供规格本身,这是错误的原因。
要解决,只需使用or
代替:
(s/def ::propertyDef (s/keys :req [::type (or ::default ::value)]
:opt [::description ::required]))
这允许::default
和::value
都出现在地图中,但这几乎总是好的。实际使用地图的代码可以简单地检查是否存在::value
并使用它,如果它不存在,则使用::default
(或者您的逻辑恰好是什么)。这通常是这样做的:
(let [myvalue (or (::value mymap) (::default mymap))] ...)
地图中可能有数千个键,这不会影响您提取所需键的能力。这就是为什么规范没有提供内置的方法来指定不应该在地图中的键,只能指定应该存在哪些键(即:req
和{{在:req-un
)中的1}}。想想大多数http服务器的工作方式:你可以给他们荒谬的标题密钥和值,但他们不会拒绝为请求提供服务;他们只是忽略它们并返回回复。
因此,您可能不需要强制执行只有一个或另一个存在,但如果必须,您可以定义一个独占或功能:
s/keys
然后将其添加为规范的附加谓词:
(defn xor
[p q]
(and (or p q)
(not (and p q))))