不是 F# 中的函数和函数组合

Not Function And Function Composition in F#

F# 是否可以在 Operators.Not 和某些标准 .NET 函数之间进行函数组合,例如 String.IsNullOrEmpty

换句话说,为什么下面的 lambda 表达式是不可接受的:

(fun x -> not >> String.IsNullOrEmpty)

>> 函数组合以相反的方式工作 - 它将左侧函数的结果传递给右侧的函数 - 所以你的代码片段将 bool 传递给 IsNullOrEmpty,这是一个类型错误。以下作品:

(fun x -> String.IsNullOrEmpty >> not)

或者你可以使用反向函数组合(但我认为 >> 在 F# 中通常是首选):

(fun x -> not << String.IsNullOrEmpty)

此外,此代码段正在创建类型 'a -> string -> bool 的函数,因为它忽略了参数 x。所以我想你可能真的想要:

(String.IsNullOrEmpty >> not)

如果要使用参数 x,可以使用管道运算符 |> 而不是函数组合运算符(<<>>)。

fun x -> x |> String.IsNullOrEmpty |> not

但通常首选具有函数组合的无点样式。