Ответ 1
String.Join
- это метод .NET. При использовании метода .NET F # рассматривает его как функцию, которая принимает кортеж в качестве аргумента (при вызове он записывает параметры как f(a, b)
). Оператор |>
может использоваться с функциями, использующими карри-форму параметров (и может быть вызван путем записи f a b
).
Вместо этого вы можете использовать функцию String.concat
из библиотеки F # (которая делает то же самое):
["a"; "b"] |> String.concat "+"
EDIT File.WriteAllLines
- это тот же случай. Если вы хотите использовать его как часть конвейера, вы можете написать функцию F #, которая завершает вызов:
let writeAllLines file (lines:seq<string>) =
System.IO.File.WriteAllLines(file, lines)
В общем, вы можете использовать |>
с методами .NET, только если вы хотите написать все аргументы в левой части оператора. Вы можете, например, написать:
("+", ["a"; "b"]) |> System.String.Join
... но это не соответствует обычному использованию оператора трубопровода. При работе с .NET API обычно лучше использовать С# -подобный стиль программирования (без конвейерной обработки), потому что трубопровод работает только с функциональными библиотеками.