F # curry. NET стандартные библиотечные функции с несколькими параметрами? - PullRequest
1 голос
/ 04 мая 2020

Согласно моей книге, стандартные библиотечные функции. NET могут иметь аргументы, отправляемые через конвейеры.

Кажется, это работает для функций с одним аргументом, но не для функций с несколькими аргументами, и в книге об этом не говорится. Я хотел бы уточнить, почему возможно следующее -

"hello" |> Directory.GetCreationTime

, где это функция с одним параметром. NET. Хотя это не так:

"source" |> Directory.Move "dst"

, где это. NET двухпараметрическая функция.

Я понимаю. NET Стандартная библиотека встроена в нефункциональную не используя F #, но это определенно потому, что в книге сказано, что библиотеку. NET можно вызывать с использованием переданных по конвейеру функций, не указывая, что они должны быть одним параметром, что меня смущает.

Так что мне любопытно , можно ли карри. NET Стандартные функции библиотеки или нет? Могу ли я вызывать их только через каналы, если они только один параметр?

1 Ответ

3 голосов
/ 04 мая 2020

Реальная реализация методов стандартной библиотеки может отличаться, но в конкретном примере c, который вы предоставили, функция Move ожидает (string*string) - то есть кортеж с двумя строками.

Таким образом, в этом случае можно использовать функцию. NET, она должна быть просто с кортежем. Следующее будет работать, хотя технически это все еще один параметр:

("source","dst") |> Directory.Move

Вы также можете сделать что-то подобное, чтобы быть более совместимым с вашим потоком:

let mapTuple func x y = func(x,y)
"source" |> mapTuple Directory.Move "dst"
...