我很好奇为什么会这样
let f = (fun a b -> a, b) >> obj.Equals
给出错误
没有名为“Equals”的可访问成员或对象构造函数接受 1 个参数
但这有效
let f = (fun a -> a, a) >> obj.Equals
我很好奇为什么会这样
let f = (fun a b -> a, b) >> obj.Equals
给出错误
没有名为“Equals”的可访问成员或对象构造函数接受 1 个参数
但这有效
let f = (fun a -> a, a) >> obj.Equals
不定义新的组合运算符:
let f = (fun a b -> a, b) >> (<<) obj.Equals
>> (<<)
是一个不错的技巧,也可以扩展为更多参数:
let compose3 f g = f >> (<<) ((<<) g)
val compose3 : ('a -> 'b -> 'c -> 'd) -> ('d -> 'e) -> ('a -> 'b -> 'c -> 'e)
考虑类型。 (>>)
有 type ('a -> 'b) ->('b -> 'c) -> ('a -> 'c)
,但你试图用'a -> ('b -> 'a*'b)
and类型的参数来调用它obj * obj -> bool
,不能像那样组合在一起。
您当然可以定义一个新的组合器来组合二元和一元函数:
let ( >>* ) f g a b = f a b |> g
在这种情况下,您可以在示例中使用它而不是(>>)
.