Domanda

Quale di queste due alternative ti ritrovi a utilizzare più spesso e quale è più "idiomatica"?

  1. f arg (obj.DoStuff ())
  2. f arg < | obj.DoStuff ()
È stato utile?

Soluzione

Nel complesso, non so che l'uno o l'altro sia più idiomatico.

Personalmente, l'unica volta che uso < | è con " raise " ;:

raise <| new FooException("blah")

A parte questo, uso sempre le parentesi. Si noti che poiché la maggior parte del codice F # utilizza funzioni al curry, ciò non implica in genere alcun "extra". parentesi:

f arg (g x y)

È quando entri in funzioni e costruttori non curry e non inizia a diventare meno carina:

f arg (g(x,y))

Probabilmente almeno considereremo la modifica delle regole dei linguaggi F # in modo che le applicazioni ad alta precedenza si leghino ancora più strettamente; proprio ora

f g()

analizza come

f g ()

ma molte persone vorrebbero che analizzasse come

f (g())

(il caso motivante nella domanda originale). Se hai una forte opinione al riguardo, lascia un commento su questa risposta.

Altri suggerimenti

Poiché l'inferenza del tipo funziona da sinistra a destra, un vantaggio dell'uso di | > è che consente a F # di inferire il tipo dell'argomento della funzione.

Come esempio inventato,

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

funziona bene, ma

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

lamenta "ricerca su oggetto di tipo indeterminato".

Uso () molto più spesso, ma è solo una preferenza, sono abbastanza sicuro che < | è più idomatico, ma io uso () per abitudine.

Quando possibile, preferisco di gran lunga | > perché legge da sinistra a destra.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top