Upcasting和泛型

时间:2015-11-01 17:45:56

标签: generics f#

我老老实实地对此感到困惑。 为什么不起作用 - 我是不是明确告诉'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

1 个答案:

答案 0 :(得分:5)

MSDN

  

在许多面向对象的语言中,上传是隐含的;在F#中,规则略有不同。将参数传递给对象类型的方法时,将自动应用向上转换。但是,对于模块中的let-bound函数, upcasting不是自动的,除非将参数类型声明为灵活类型。

     

:>运算符执行静态强制转换,这意味着强制转换的成功是在编译时确定的。

最小代码是

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