Pregunta

¿Cuál de estas dos alternativas te encuentras con más frecuencia y cuál es más "idiomática"?

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

Solución

En general, no sé si uno u otro es más idiomático.

Personalmente, la única vez que uso < | está con " aumentar " ;:

raise <| new FooException("blah")

Aparte de eso, siempre uso parens. Tenga en cuenta que, dado que la mayoría de los códigos F # utilizan funciones al curry, esto no suele implicar ningún " extra " parens:

f arg (g x y)

Es cuando entras en constructores y funciones que no tienen curry y todo eso comienza a ser menos bonito:

f arg (g(x,y))

Probablemente al menos consideremos cambiar las reglas de los lenguajes F # para que las aplicaciones de alta prioridad se unan aún más estrechamente; ahora mismo

f g()

parses como

f g ()

pero a mucha gente le gustaría que se analice como

f (g())

(el caso motivador en la pregunta original). Si tiene una opinión firme sobre esto, deje un comentario sobre esta respuesta.

Otros consejos

Debido a que la inferencia de tipos funciona de izquierda a derecha, una ventaja de usar | > es que permite a F # inferir el tipo del argumento de la función.

Como ejemplo artificial,

[1; 2; 3] |> (fun x -> x.Length*2)

funciona bien, pero

(fun x -> x.Length*2) [1; 2; 3]

se queja de " búsqueda en objeto de tipo indeterminado " ;.

Uso () mucho más a menudo, pero eso es solo una preferencia, estoy bastante seguro de que < | Es más idomático, pero uso () por hábito.

Siempre que sea posible, prefiero | > porque se lee de izquierda a derecha.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top