2015-11-01 43 views
0

我對此很誠懇地感到困惑。 爲什麼不這樣做 - 我是不是明確地告訴'T確實是View上傳和泛型

let foo<'T when 'T :> View> (v:'T):View = v 

error FS0001: This expression was expected to have type View 
but here has type 'T 

回答

5

MSDN

在許多面向對象的語言,上溯造型是隱式的;在F#中,規則略有不同。上傳是在將參數傳遞給對象類型的方法時自動應用的。但是,對於模塊中的限制功能,上傳不是自動的,除非參數類型被聲明爲靈活類型。

:>運算符執行靜態轉換,這意味着轉換的成功是在編譯時確定的。

最小代碼將是

let foo<'T when 'T :> View> (v:'T):View = v :> _ 
+2

爲什麼不使用[柔性類型](https://msdn.microsoft.com/en-us/library/dd233198.aspx)? '讓foo(v:#View)= v:> View' – kaefer