元组函数组合
我很好奇为什么
let f = (fun a b -> a, b) >> obj.Equals
会出现这个错误
没有名为“Equals”的可访问成员或对象构造函数接受 1 个参数
但这有效
let f = (fun a -> a, a) >> obj.Equals
I'm curious why this
let f = (fun a b -> a, b) >> obj.Equals
gives the error
No accessible member or object constructor named 'Equals' takes 1 arguments
but this works
let f = (fun a -> a, a) >> obj.Equals
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不定义新的组合运算符:
>> (<<)
是一个很好的技巧,也可以扩展为更多参数:Without defining a new combinator operator:
>> (<<)
is a nice trick, and can also be extended for more arguments:考虑类型。
(>>)
的类型为('a -> 'b) ->('b -> 'c) ->; ('a -> 'c)
,但您尝试使用'a ->; 类型的参数调用它('b -> 'a*'b)
和obj * obj -> bool
,它不能像这样组合在一起。您当然可以定义一个新的组合器来组合二元和一元函数:
在这种情况下,您可以在示例中使用它而不是
(>>)
。Consider the types.
(>>)
has type('a -> 'b) ->('b -> 'c) -> ('a -> 'c)
, but you're trying to call it with arguments of type'a -> ('b -> 'a*'b)
andobj * obj -> bool
, which can't be made to fit together like that.You could of course define a new combinator for composing binary and unary functions:
in which case you can use it in your example instead of
(>>)
.