首页 > 解决方案 > F# currying 具有多个参数的 .NET 标准库函数?

问题描述

根据我的书,标准的 .NET 库函数可以通过管道发送参数。

这似乎适用于单参数函数,但不适用于多参数函数,并且书中没有提到这一点。我想澄清一下为什么以下是可能的 -

"hello" |> Directory.GetCreationTime

这是一个 .NET 单参数函数。虽然以下不是:

"source" |> Directory.Move "dst"

这是一个 .NET 两个参数函数。

我知道 .NET 标准库是以非功能方式构建的,不使用 F#,但是这特别是因为这本书说可以使用管道函数调用 .NET 库,而没有指定它们需要是单个参数,这让我感到困惑.

所以我很好奇,是否可以使用 .NET 标准库函数?如果它们只是一个参数,我只能通过管道调用它们吗?

标签: .netf#

解决方案


标准库方法的实际实现可能会有所不同,但在您提供的具体示例中,该Move函数需要一个(string*string)— 即具有两个字符串的元组。

所以在这种情况下可以对 .NET 函数进行 curry,它应该只是一个元组。以下将起作用,尽管它在技术上仍然是一个参数:

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

您还可以执行以下操作以与您的流程更加一致:

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

推荐阅读