Pergunta

Qual destas duas alternativas que você encontrar-se com mais frequência, e que é mais "idiomático"?

  1. f arg (obj.DoStuff ())
  2. f arg <| obj.DoStuff ()
Foi útil?

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

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