从 F# 中的序列构造中调用函数

Calling a function from within a sequence construct in F#

我在从序列构造中调用函数时遇到问题。 显然,这个函数被懒惰地调用,以至于整个代码 不会产生预期的结果。这是代码:

 mylist
 |> fun myseq -> 
    seq { for b in mylist do yield { b with status = (getStatus b)}}

这里,mylist 是一个记录列表。我打算用它构建一个序列 从函数 getStatus 更新字段状态。它只是做 不起作用,该函数不会出现 运行 的每次迭代 for 循环如预期。

感谢任何帮助。

序列是惰性的。在枚举序列之前,您的函数不会 运行。

您需要将序列转换为具体的集合类型,如列表或数组(这将枚举序列并强制您的函数运行):

seq { for b in mylist do yield { b with status = getStatus b } }
|> Seq.toList

或者,如果您只关心副作用(这不是您的情况),请使用 Seq.iter.