繁体   English   中英

在 F# 中,如何将 function 投射到不同的代表?

[英]In F#, How can I cast a function to a different delegate?

我需要将带有签名Thing -> Thing -> int的 function 转换为Comparison<Thing>

例如,当我有:

Array.Sort(values, mySort)

我收到一条错误消息,指出“此表达式应具有比较类型,但此处的类型为 Thing -> Thing -> int

当我尝试这个时:

Array.Sort(values, (fun (a, b) -> mySort a b))

(实际上,这是通过包装对象)

我收到一条错误消息,指出“类型约束不匹配。类型 ''a -> 'b' 与类型 'Comparison' 不兼容

我应该如何提供Comparison<T>

仅供参考: Comparison<T>是具有签名'T * 'T -> int的委托

这对我有用:

let values = [|1;2;3|]
let mySort a b = 0
Array.Sort(values, mySort)

但是你有没有试过:

Array.Sort(values, Comparison(mySort))

奇怪的是,尽管委托签名以元组形式表示(例如'T * 'T -> int ),但您需要以咖喱形式(例如fun ab -> mySort ab )提供您的 function 。 请参阅规范的第 6.4.2 节

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM