2014-02-24 26 views

回答

3

當你要編寫能夠與多個不同的數字類型工作的功能,你需要使用inline和「靜態成員的約束」。問題是,正常的.NET泛型不能捕獲像「支持+運營商」的約束。

爲了使您的樣品add功能通用的,你可以使用inline

let inline add x y = x + y 

當你看到推斷出的類型,你會看到這樣的事情:

val inline add : 
    x: ^a -> y: ^b -> ^c 
    when (^a or ^b) : (static member (+) : ^a * ^b -> ^c) 

這本質上說,該函數可以在支持+運算符的任何兩個參數上調用。請注意,這只是工作,因爲該功能是inline等F#編譯器不必依靠.NET來表達的約束。對於>>>運營商相同的作品:

let inline f a b = a >>> b 

功能現在可以用兩種int64int參數一起使用:

f 1024L 2 
f 1024 2 

我寫了一篇文章關於writing generic numeric code in F#前一段時間,你可能會覺得太有用。

+0

您可以編輯您的問題,並添加你的意思(理想最少的樣品以證明你想要得到什麼)的樣本? –

+0

我看了你的文章,現在就得到它。非常感謝你,併爲我可憐的英語感到難過。 – Syeerzy

+0

@Syeerzy沒問題,我也沒有以英語爲母語(和歡迎計算器!) - 如果你需要使用這個類型裏面更多的幫助,隨時詢問或編輯和擴展你的問題。 –

相關問題