我以'a option when 'a :> IBaseType
的形式得到了一些計算結果。有從IBaseType
派生的類型的樹,我不知道這個是什麼特定類型的選項,但重要的是它是特定派生的,而不是基類型的選項。所以我想把它上傳到IBaseType option
來進一步處理它。由於選項是泛型類型,因此不可能直接進行轉換(在F#中),我必須在Option.map中進行轉換。沒有什麼複雜的,類型推斷按預期工作... 中間鑄造選項也按預期方式解決... 直到功能完成。此時由於某種原因,類型推斷決定,原來的選項必須是已經IBaseType option
類型: 如何推廣f#選項?
中級類型已經早解決了,爲什麼決定重新分配infered類型op
的?當然這會導致運行時異常。看起來像編譯器錯誤,但主要規則是編譯器中沒有錯誤。
所以最後它聽起來真的很愚蠢:我不知道如何簡單地上傳簡單的選項。只是爲了使圖片更清晰:processResult
需要IBaseType option
作爲參數。這裏是麻煩的功能來源:
(fun (x: obj) ->
let op = x :?> _ option
let upcastOp = op |> Option.map (fun y -> y :> IBaseType)
upcastOp |> processResult)
任何想法如何處理這個?
這是哪個編輯?看起來非常熟悉,但我找不到它。 –
你能改變'processResult'來接受'選項<#IBaseType>'嗎? – Daniel
@RamonSnir:這是Visual Studio,只是很少調整:[黑曜石主題之子](http://studiostyl.es/schemes/son-of-obsidian-modified-for-res- harper),[Envy Code R字體]( http://damieng.com/blog/2008/05/26/envy-code-r-preview-7-coding-font-released)和[View Whitespace on](http://blogs.msdn.com/b /zainnab/archive/2012/06/05/9990405.aspx)。 –