2
從answer by kvb關於如何調用隱式轉換操作符:請解釋這個語法
let inline (!>) (x:^a) : ^b = ((^a or ^b) : (static member op_Implicit : ^a -> ^b) x)
我知道F#一段時間,但我只是不知道如何解析在這裏實施。什麼是(^a or ^b)
?那之後的東西?請從各個部分的語法上進行說明。
從answer by kvb關於如何調用隱式轉換操作符:請解釋這個語法
let inline (!>) (x:^a) : ^b = ((^a or ^b) : (static member op_Implicit : ^a -> ^b) x)
我知道F#一段時間,但我只是不知道如何解析在這裏實施。什麼是(^a or ^b)
?那之後的東西?請從各個部分的語法上進行說明。
^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 answer或this MSDN article。
一定會在某處出現重複 - 請參閱文檔https://msdn.microsoft.com/zh-cn/library/dd548046.aspx –
文檔解釋了約束,但不解釋此處顯示的函數調用。 – Asik