gpt4 book ai didi

f# - Seq.map 中的代码未执行?

转载 作者:行者123 更新时间:2023-12-02 04:42:35 25 4
gpt4 key购买 nike

我有以下代码。而Seq.mapignore之间的代码不执行。两个printfn都没有执行。为什么?

我尝试调试它并设置断点

  1. links(突出显示整个管道),
  2. printfn "正在下载"
  3. printfn "Downloaded" 在函数 download 中。

执行将在第一个断点处中断,但绝不会命中断点 2、3。 (或被踏入)。由于结果被忽略,F# 是否优化了 Seq.map 部分?

let download url =
printfn "Downloaded"
() // Will complete the function later.

let getLinks url =
....
|> Seq.toList

let .....
async {
......
links = getLinks url // Tried to modify getLinks to return a list instead of seq
........
links // execution hit this pipe (as a whole)
|> Seq.map (fun l ->
printfn "Downloading" // execution never hit here, tried links as Seq or List
download l)
|> ignore

更新:我知道 for in do 有效。为什么 Seq.map 没有?

最佳答案

正如 John 所说,seq 是惰性的,因为您从未真正遍历序列(而是通过 ignore 丢弃它),您传递给的 lambda 中的代码Seq.map 永远不会执行。如果将 ignore 更改为 Seq.iter ignore,您将遍历序列并看到所需的输出。 (任何必须遍历序列的函数都可以工作,例如 Seq.count |> ignore。)

关于f# - Seq.map 中的代码未执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20511228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com