欢迎!有关如何使用本网站的更多信息,请参阅关于页面。
`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 Can't pop empty vector 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上述示例),我只希望它出现一次,我必须使用Rich推荐的单独的'let
评论者:gfredericks
Brandon Bloom 指出,{{for}} 和 {{doseq}} 之间存在一个区别,那就是 {{for}} 是懒加载的,因此在第一次请求项之后,对于初始 {{:let}} 来说,是否应该立即评估或在请求第一项之后还不明确。{{doseq}} 没有这样的歧义。
@Gary,我认为这是一个很好的问题,但无论如何选择都会比当前的矛盾情况好。如果你将其改为懒加载,我真的想不出有什么缺点。即使它不是懒加载的,这也将符合当前将 for 包裹在 let 中的代码的性能特征。