Elegir entre f x
, x |> f
y f <| x
es principalmente una cuestión de estilo . No hay una regla absoluta para elegir uno en lugar del otro . El operador |>
es muy popular, y es una buena idea usarlo.
<|
es menos frecuente, pero si nos fijamos en las fuentes del compilador, encontrará un par de usos de . Por ejemplo:
raise <| System.InvalidOperationException (SR.GetString(SR.QillFormedAppOrLet))
if info.precision then
failwithf "%s" <| FSComp.SR.forFormatDoesntSupportPrecision(ch.ToString())
<|
se utiliza para eliminar un paréntesis, y creo que hacer el código más legible cuando se usa con cuidado. Cuando lo ves, sabes que la siguiente expresión es el argumento de tu función. Usted no tiene que buscar el paréntesis de cierre. Le sugiero que use con moderación, y por lo general debería evitar la mezcla <|
y |>
en la misma expresión, ya que puede ser muy confuso .
A veces me gusta usar este operador para crear un "bloque", con una palabra clave fun
o lazy
.
let f (l: Lazy<_>) =()
let g (f: _ -> _ -> _) =()
f <| lazy
let x = 1 + 1
x * x
g <| fun x y ->
let sqr n = n * n
sqr x + sqr y
El bloque se basa en la muesca, por lo que encaja muy bien en F # código. Gracias al operador <|
, no necesita un paréntesis final.
¿Es diferente de '' $ operador de Haskell? –
Es la misma definición, con una asociatividad diferente (por lo que es un poco menos útil). – Laurent
http://theburningmonk.com/2011/09/fsharp-pipe-forward-and-pipe-backward/ –