不是 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
但通常首选具有函数组合的无点样式。
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
但通常首选具有函数组合的无点样式。