關鍵字的使用尋找有關靜態解析類型參數爲內聯函數我FSharp.Core偶然發現的various primitive operators定義信息:無證`when`在FSharp.Core
let inline (+) (x: ^T) (y: ^U) : ^V =
CheckedAdditionDynamic<(^T),(^U),(^V)> x y
when ^T : int32 and ^U : int32 = (# "add.ovf" x y : int32 #)
when ^T : float and ^U : float = (# "add" x y : float #)
// <snip>
when ^T : ^T = ((^T or ^U): (static member (+) : ^T * ^U -> ^V) (x,y))
如在片段中可以看出以上when
關鍵字的格式爲:when expr1 = expr2
各種內置類型。我猜這是某種編譯器等價的「如果T = int使用操作碼add.ovf,否則如果...,否則做」。
但是,我無法在F#文檔中找到這種語法的單個參考/解釋。是否有一些熟悉F#的人可以解釋上面代碼段中發生了什麼?
請注意,您不能在標準F#中使用此語法(或'(#...#)'語法)。 – 2014-10-16 14:33:44
下面是一些解釋:http://stackoverflow.com/questions/15968054/what-is-the-syntax-seen-in-f-standard-library-implementation/15968212#15968212 – 2014-10-17 00:15:06
它似乎被稱爲靜態有條件的優化,我認爲它不應該在覈心庫之外使用 - 你可以看看你是否嘗試使用它並檢查編譯器錯誤;) – Carsten 2015-06-25 14:59:51