Выбор между f x
, x |> f
и f <| x
- это в основном вопрос стиля.Там нет абсолютного правила для выбора одного вместо другого.Оператор |>
очень популярен, и его стоит использовать.
<|
встречается реже, но если вы заглянете в источники компилятора, вы найдете несколько вариантов его использования.Например:
raise <| System.InvalidOperationException (SR.GetString(SR.QillFormedAppOrLet))
if info.precision then
failwithf "%s" <| FSComp.SR.forFormatDoesntSupportPrecision(ch.ToString())
<|
используется для удаления скобок, и я думаю, что это делает код более читабельным при аккуратном использовании.Когда вы видите это, вы знаете, что следующее выражение является аргументом вашей функции.Вам не нужно искать закрывающую скобку.Я рекомендую вам использовать его экономно, и вам, как правило, следует избегать смешивания <|
и |>
в одном выражении, поскольку это может быть очень запутанным.
Мне иногда нравится использовать этот оператор для создания "блока", с ключевым словом fun
или 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
Блок основан на отступе, поэтому он хорошо вписывается в код F #.Благодаря оператору <|
вам не нужны завершающие скобки.