Я обычно называю |>
оператором конвейерной обработки , но я не уверен, является ли официальное имя оператором труб или оператором конвейерной обработки ( хотя это, вероятно, и не имеет значения, поскольку имена достаточно похожи, чтобы избежать путаницы: -)).
@ Л.Бушкин уже дал отличный ответ, поэтому я просто добавлю пару замечаний, которые также могут быть интересными. Очевидно, что оператор конвейерной обработки получил свое имя, потому что его можно использовать для создания конвейера, который обрабатывает некоторые данные в несколько этапов. Типичное использование при работе со списками:
[0 .. 10]
|> List.filter (fun n -> n % 3 = 0) // Get numbers divisible by three
|> List.map (fun n -> n * n) // Calculate squared of such numbers
Это дает результат [0; 9; 36; 81]. Кроме того, оператор является левоассоциативным, что означает, что выражение input |> f |> g
интерпретируется как (input |> f) |> g
, что позволяет последовательно выполнять несколько операций, используя |>
.
Наконец, я нахожу весьма интересным, что оператор конвейерной обработки во многих случаях соответствует цепочке методов из объектно-ориентированных языков. Например, предыдущий пример обработки списка будет выглядеть следующим образом в C #:
Enumerable.Range(0, 10)
.Where(n => n % 3 == 0) // Get numbers divisible by three
.Select(n => n * n) // Calculate squared of such numbers
Это может дать вам некоторое представление о том, когда можно использовать оператор, если вы приходите из объектно-ориентированного фона (хотя он используется во многих других ситуациях в F #).