考虑clojure中的以下代码:
(让[a(find-a),b(find-b)](println a)(println b))
其中b是序列.函数find-a中也有一些println语句.我期望在标准输出中看到的是:a,来自find-a,b中的println语句的结果.但是,我得到的是:a,b的一部分,来自find-a中的println语句,b的其余部分.
这是由于序列的懒惰评估?
这段代码中没有任何东西本身就是懒惰的 - 它应该以正确的顺序执行.
然而,根据什么a和b是否有可能是一些懒惰的嵌入到他们,这仅被执行时(println a)和(println b)执行.特别是,如果a和b是使用map或类似的东西创建的延迟序列,则只有在println语句中强制执行时才会评估序列的后面部分.为了提供更具体的,你需要描述的内部结构a和b.
我实际上怀疑问题可能是因为缓冲区没有被冲洗 - 请参阅Clojure - 副作用发生故障
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |