欢迎!请在 关于 页面查看有关此如何工作的更多信息。
`user> (for [y [2 3 4]
`
:let [x 1]] [x y])
([1 2] [1 3] [1 4])user> (for [:let [x 1]
y [2 3 4]] [x y])
IllegalStateException 无法弹出空向量 clojure.lang.persistentvector.pop (PersistentVector.java:380) `
原因
解决方案
修补程序 被检查
评论者:jafingerhut
相关(可能相同)的票据 CLJ-207 已被拒绝。
评论者:jaycfields
这看起来像是一个重复的问题。我对此不起作用感到惊讶,但它为 doseq 起作用
main=> (doseq [:let [x 1] y [2 3 4]] (println x y)) 1 2 1 3 1 4 nil
我认为,只要这种不一致性存在,您就会继续收到此类错误报告。
为了完整性,我认为值得提到,由于我计算的价值需要,我无法简单地更改顺序(像 Alex 上面示例中那样),我只希望它发生一次,我必须使用一个单独的 'let (正如 Rich 推荐的那样)
评论者:gfredericks
Brandon Bloom 指出,{{for}} 和 {{doseq}} 的一个区别是 {{for}} 是惰性的,因此对于初始的 {{:let}} 而言,不清楚它应该立即评估还是在使用第一个元素之后。{{doseq}} 没有这种歧义。
@Gary,我认为这是一个好问题,但任何选择都比当前的不一致性更好。即使让它变为惰性的,我实在想不到有什么缺点。即使它不是惰性的,那也会与现在已经用 let 包裹的代码的性能特性相匹配。