为什么 takeWhile 不传递值

Why takeWhile does not delivery values

我有以下代码片段:

let t = seq { 1..10 } |> Seq.takeWhile (fun e -> e % 2 = 0)
t |> Seq.iter( fun e -> printf "%A " e)

t 不包含任何值,但我期待 2、4、6 和 8。我做错了什么?

您必须使用 Seq.filter 而不是 Seq.takeWhileSeq.takeWhile 一旦谓词 returns false 就停止处理,因为 false 在 1 上返回,所以没有进一步的元素。

来自 MSDN:

Returns a sequence that, when iterated, yields elements of the underlying sequence while the given predicate returns true, and then returns no further elements.

seq { 1..10 } 
|> Seq.filter (fun e -> e % 2 = 0)
|> Seq.iter( fun e -> printf "%A " e)

注意:不需要将它绑定到 t,因为 Seq.iter 不产生任何元素,只是 unit