【问题标题】:for-loop doesn't executing [duplicate]for循环不执行[重复]
【发布时间】:2021-02-13 12:25:10
【问题描述】:

我正在编写小函数并且有一个奇怪的错误。我的 for 循环不执行:

(fn [resp]
  (let [i
    (s/split resp #"<br>")]
    (for [j i]
      (println j))))

所以我没有结果,我的 for 部分中的代码无关紧要。有什么问题?


已编辑:
我重写了我的函数:

(fn [resp]
  (for [i (s/split resp #"<br>")]
    (println i))

它仍然没有执行。

【问题讨论】:

    标签: for-loop clojure


    【解决方案1】:

    您遇到了 Clojure 的 for 循环的惰性方面:

    (defn dummy []
      (println :aaa)
      (for [i [1 2 3]]
        (println i))
      (println :bbb)
      (vec
        (for [i [1 2 3]]
          (println i)))
      (println :ccc))
    

    当被调用时,你会得到输出:

    :aaa
    :bbb
    1
    2
    3
    :ccc
    

    vec(或doall)将强制计算惰性循环,从而导致(println i) 表达式运行。

    您可以在this list of documentation查看更多详细信息。

    【讨论】:

    • OP 很可能不理解 Clojure for 宏和其他语言(如 C 或 Java)中的 for 循环之间的区别。我最好的猜测是 OP 真正想要的是类似于 (doseq [i [1 2 3]] (println i)) 的东西。
    猜你喜欢
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 2021-11-16
    相关资源
    最近更新 更多