F # estilo - preferem () ou <|
-
02-07-2019 - |
Pergunta
Qual destas duas alternativas que você encontrar-se com mais frequência, e que é mais "idiomático"?
- f arg (obj.DoStuff ())
- f arg <| obj.DoStuff ()
Solução
No geral, eu não sei que um ou o outro é mais idiomática.
Pessoalmente, o que eu uso só o tempo <| é com "aumento":
raise <| new FooException("blah")
Além disso, eu sempre usar parênteses. Note-se que desde que a maioria de F # usa código curry funções, este normalmente não implica quaisquer parens "extra":
f arg (g x y)
É quando você entrar em funções não-curry e construtores e outros enfeites que ele começa a ficar menos bonito:
f arg (g(x,y))
Iremos provavelmente, pelo menos consideram mudar as regras F # idiomas para que os aplicativos de alta precedência ligam ainda mais firmemente; agora
f g()
parses como
f g ()
mas um monte de gente gostaria que analisar como
f (g())
(o caso motivando na pergunta original). Se você tem uma opinião forte sobre isso, deixe um comentário sobre esta resposta.
Outras dicas
Porque obras tipo de inferência da esquerda para a direita, um bônus de usar |>
é que ele permite F # para inferir o tipo do argumento da função.
Como um exemplo inventado,
[1; 2; 3] |> (fun x -> x.Length*2)
funciona muito bem, mas
(fun x -> x.Length*2) [1; 2; 3]
reclama de "pesquisa em objeto do tipo indeterminado".
Eu uso () muito mais frequentemente, mas isso é apenas preferência, eu tenho certeza que <| é mais idomatic, mas eu uso () pelo hábito.
Sempre que possível, eu prefiro muito mais |.> Porque ele lê da esquerda para a direita ??p>