以下是在 go 块中 ClojureScript 代码的片段
(cond
(and (vector? x) (= (first x) :some-key)) ...)
这会生成以下 JavaScript 代码(用于 cond 情景)
if (40 === f) {
return
d = b(link: 9),
f = cljs.core.vectorQMARK.call(null, d),
d = cljs.core.first.call(null, d),
d = cljs.core.EQ.call(null, d, new cljs.core.Keyword(null, "some-key", "some-key", -978969032)),
cljs.core.truth_(f && d) ? b(link: 1) = 42 : b(link: 1) = 43,
new cljs.core.Keyword(null, "recur", "recur", -437573268);
}
在我看来,这两个 and 参数实际上都会被评估。因此,当 'x' 不是可迭代的,我的代码触碰到这个 cond 情景时会崩溃。