我有以下代码段:
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.我做错了什么?
答案 0 :(得分:2)
您必须使用Seq.filter
代替Seq.takeWhile
。 Seq.takeWhile
在谓词返回false
后立即停止处理,并且因为1上返回false
,所以没有进一步的元素。
来自MSDN:
返回一个序列,当迭代时,产生基础序列的元素,而给定的谓词返回 true ,,然后不再返回其他元素。
seq { 1..10 }
|> Seq.filter (fun e -> e % 2 = 0)
|> Seq.iter( fun e -> printf "%A " e)
注意:无需将其绑定到t
,因为Seq.iter
不会产生任何元素,仅unit