簡體   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