Pergunta

> seq { for i in 0..3 do yield float i };;
val it : seq<float> = seq [0.0; 1.0; 2.0; 3.0]
> seq [ for i in 0..3 do yield float i ];;
val it : seq<float> = [0.0; 1.0; 2.0; 3.0]

P.S. por que F # esperar originalmente seqüências sem o prefixo "seq", mas agora eles querem o prefixo?

Foi útil?

Solução

Mais esclarecimentos sobre as duas formas que você postou:

O primeiro usa uma compreensão seqüência direta, "seq {...}". A parte "seq" era opcional antes, mas isso não vai ser suportado no futuro. Eu acho que faz coisas como "async {...}" e a sintaxe do fluxo de trabalho mais difícil ou algo assim.

Agora, o segundo é uma lista pura:

> let x = [ for i in 0..3 do yield float i ];;

val x : float list

"seq" é também uma função:

> seq;;
val it : (seq<'a> -> seq<'a>) = <fun:clo@0_1>

E uma vez que qualquer lista também é uma seqüência, fazendo "seq [1; 2; 3;]" está apenas aplicando a função seq para a lista. É meio como lançando-a seq do tipo de lista.

> x;;
val it : float list = [0.0; 1.0; 2.0; 3.0]

> seq x;;
val it : seq<float> = [0.0; 1.0; 2.0; 3.0]

Edit: A fonte para a função seq é:

let seq (x : seq<_>) = (x :> seq<_>)

Assim, "sorta como convertê-lo" deve ler "convertê-lo através de uma função auxiliar". Como para a impressão de seqüências dentro de parênteses, eu acho que é apenas um artefato de impressão bonita.

Outras dicas

O primeiro é uma seq (IEnumerable).

O segundo é estranho; se livrar do 'seq' e é uma compreensão de lista (lista). Não há nenhuma razão para escrevê-lo como é; tanto para uso seq {} ou [] ou [| |] Para fazer uma seq ou uma lista ou um array

.

Os curlies-não-prefixado-by-seq é um formulário que se tornará obsoleto, uma vez que faz com que algumas outras partes da linguagem potencialmente ambígua.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top