我需要将带有签名Thing -> Thing -> int
的函数转换为Comparison<Thing>
。
例如,当我有:
Array.Sort(values, mySort)
我收到错误声明“此表达式预计会有类型比较,但此处的类型为Thing - &gt; Thing - &gt; int ”
当我尝试这个时:
Array.Sort(values, (fun (a, b) -> mySort a b))
(实际上,这是通过包装器对象)
我收到错误消息“类型约束不匹配。类型'' - &gt;'b'与”比较“类型不兼容”
我应该如何提供Comparison<T>
?
仅供参考:Comparison<T>
是具有签名'T * 'T -> int
答案 0 :(得分:2)
这对我有用:
let values = [|1;2;3|]
let mySort a b = 0
Array.Sort(values, mySort)
但你试过了吗?
Array.Sort(values, Comparison(mySort))
答案 1 :(得分:0)
奇怪的是,尽管代表签名以tupled形式表示(例如'T * 'T -> int
),但您需要以curry形式提供您的功能(例如fun a b -> mySort a b
)。请参阅规范的section 6.4.2。