La construcción ->
sólo se admite en la sintaxis de la expresión de la secuencia de "simple" donde se está haciendo una proyección (Seq.map
) sobre una fuente de datos utilizando la siguiente estructura:
seq { for <binding> in <input> -> <projection> }
El primer ejemplo se mencionado es el uso de for .. to ..
que es una construcción sintáctica diferente que for .. in
, pero se puede volver a escribir usando el segundo (de hecho, casi siempre uso for .. in
al escribir expresiones de secuencia):
seq { for i in 0 .. System.Int32.MaxValue -> i }
En todas las demás formas de expresiones de secuencia, tendrá que usar yield
. En versiones anteriores de F #, la sintaxis ->
era equivalente a yield
(y también había ->>
que era equivalente a yield!
). Así, por ejemplo, que fue capaz de escribir:
seq { -> 10 // You need 'yield' here
->> [ 1; 2; 3 ] } // You need 'yield!' here
Esta sintaxis es bastante extraño, así que creo que la razón principal para la fabricación de estos dos obsoleta es mantener el lenguaje coherente. La misma expresión de cálculo la sintaxis se usa en expresiones de secuencia (donde ->
tiene algún sentido), pero también para otros tipos de cálculo (y puede definir el suyo propio), donde yield
parece más apropiado (y también corresponde a return
en flujos de trabajo asincrónicos u otras expresiones de cálculo).
La sintaxis específica de secuencia "simple" sigue siendo útil, porque te ahorra algo de tipeo (reemplazas do yield
con solo ->
), pero en casos más complicados, no guardas tantos caracteres y creo que el la sintaxis que usa ->
& ->>
puede parecer un poco críptica.