Seq.map和Seq.mapi在匿名函数返回单位时优化了副作用?

时间:2015-05-03 14:25:54

标签: dictionary f# seq side-effects

在调试memoization函数时,我发现自己试图找出Seq.mapi是否实际迭代序列,所以我用printfn调用替换了匿名函数,如下所示:

let x = "test" |> Seq.map  (fun c -> c |> printfn "%c")

令我惊讶的是,打印到控制台的副作用从未发生过,在FSI中它只返回val d : seq<unit>。虽然这个结果是正确的,但我曾预料到当map函数迭代序列时会产生副作用。即,当我用Seq.map id替换它时,它按预期工作并返回自己。

当我将Seq.mapSeq.mapi替换为Seq.iterSeq.iteri时,实际上会打印副作用。

现在我认为这是由于序列被延迟评估而且F#内部要么创建一个闭包序列,要么实际上什么都不做,直到它被调用,因为如果我这样做{{ 1}},它 打印序列中的所有项目。

0 个答案:

没有答案
相关问题