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

Arm*_*sta 3 f# sequence

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

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

这里,mylist是一个记录列表.我打算用它从函数getStatus更新的字段状态构建一个序列.它根本不起作用,该函数似乎没有按预期运行for循环的每次迭代.

感谢任何帮助.

scr*_*wtp 5

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

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

seq { for b in mylist do yield { b with status = getStatus b } }
|> Seq.toList
Run Code Online (Sandbox Code Playgroud)

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