1

我有一个侧面有效的操作

     securities |> Seq.map (fun x -> request.Append("securities",x))

让代码执行最惯用的方式是什么?

我写了一个 Seq.Doit,但它很痒

  module Seq =
     let Doit sa = sa |> Seq.toArray |> ignore
4

2 回答 2

6

我认为Seq.iter在这种情况下是合适的。从 MSDN 参考页面:

Seq.iter : ('T -> unit) -> seq<'T> -> unit

将给定函数应用于集合的每个元素。

因此,假设request.Append不返回任何内容,您的代码将变为:

securities |> Seq.iter (fun x -> request.Append("securities", x))
于 2012-03-09T09:40:36.740 回答
2

当您使用Seq.delay或序列表达式 seq{} 创建序列时,将使用延迟序列。序列上的任何函数返回除seq可以强制计算之外的任何数据类型。

或者,您可以使用for循环而不是Seq.iter

for s in securities do
   request.Append("securities", s)

如果你想隐藏副作用并返回request以备后用,Seq.fold是一个不错的选择:

securities |> Seq.fold (fun acc x -> acc.Append("securities", x); acc) request
于 2012-03-09T10:18:10.673 回答