【问题标题】:Calling a function from within a sequence construct in F#从 F# 中的序列构造中调用函数
【发布时间】:2016-02-13 22:58:00
【问题描述】:

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

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

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

感谢任何帮助。

【问题讨论】:

    标签: f# sequence


    【解决方案1】:

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

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

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

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

    【讨论】:

    • @ArmandoAcosta:很高兴听到这个消息。如果它解决了您的问题,您应该接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 2010-12-15
    • 1970-01-01
    • 2014-08-25
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多