Pergunta

Eu tenho uma operação colateral eficaz

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

Qual é a maneira mais idiomática de executar o código?

Eu escrevi um Seq.Doit, mas coça

  module Seq =
     let Doit sa = sa |> Seq.toArray |> ignore
Foi útil?

Solução

As sequências diferidas são usadas quando você cria sequências usando Seq.delay ou expressão de sequência seq{}.Qualquer função na sequência retornando qualquer tipo de dados diferente seq pode forçar a computação.

Alternativamente, você pode usar for loop em vez de Seq.iter:

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

Se você quiser ocultar os efeitos colaterais e retornar request para uso posterior, Seq.fold é uma boa escolha:

securities |> Seq.fold (fun acc x -> acc.Append("securities", x); acc) request

Outras dicas

Eu penso Seq.iter é apropriado neste caso.Na página de referência do MSDN:

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

Aplica a função fornecida a cada elemento da coleção.

Então, supondo que request.Append não retorna nada, seu código se torna:

securities |> Seq.iter (fun x -> request.Append("securities", x))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top