while修饰符在clojure中意味着什么?

Joh*_*ang 2 clojure

以下显示修饰符"while"表示一旦元素与检查匹配,迭代将停止:

=> (for [x [3 2 3 1] :while (< x 3)] x)
()
Run Code Online (Sandbox Code Playgroud)

但是为什么以下不停止迭代?它应该在我的(错误的)理解中返回一个空列表.

=> (for [x [3 2 3 1] y [:a :b] :while (< x 3)] [x y])
([2 :a] [2 :b] [1 :a] [1 :b])
Run Code Online (Sandbox Code Playgroud)

实际上,事实证明在这种情况下"when"和"while"修饰符之间没有区别.

=> (for [x [3 2 3 1] y [:a :b] :when (< x 3)] [x y])
([2 :a] [2 :b] [1 :a] [1 :b])
Run Code Online (Sandbox Code Playgroud)

怎么会这样?

ama*_*loy 5

:while:when修饰紧接他们结合之后总是检查,只适用于迭代循环.如果要停止绑定new xs,则需要放置:whileafter x子句,而不是y子句.