2016-04-03 78 views
2

answer by kvb關於如何調用隱式轉換操作符:請解釋這個語法

let inline (!>) (x:^a) : ^b = ((^a or ^b) : (static member op_Implicit : ^a -> ^b) x) 

我知道F#一段時間,但我只是不知道如何解析在這裏實施。什麼是(^a or ^b)?那之後的東西?請從各個部分的語法上進行說明。

+1

一定會在某處出現重複 - 請參閱文檔https://msdn.microsoft.com/zh-cn/library/dd548046.aspx –

+0

文檔解釋了約束,但不解釋此處顯示的函數調用。 – Asik

回答

6

^a or ^b意思是字面意思是「^a^b」。

冒號:表示「有」或「包含在」中,具體取決於您如何看待它。

所以整個表達(^a or ^b) : (static member op_Implicit : ^a -> ^b)意味着op_Implicit「具有鍵入^a -> ^b和任一類型^a或鍵入^b定義‘’命名靜態成員」。這整個表達式最終評估爲^a -> ^b類型的函數。

然後,位於該表達式右側的x意味着「函數應用程序」,就像在通常的F#語法中一樣。

所以合在一起就意味着整個事情「上^a類型或鍵入^b,找到名爲靜態成員‘op_Implicit’有型^a -> ^b,並且該成員適用於參數x」。

有關靜態解析約束的更多討論,請參閱this answerthis MSDN article