Generics 向上投射和泛型

Generics 向上投射和泛型,generics,f#,Generics,F#,我真的对此感到困惑。 为什么不起作用呢?我不是明确地告诉你,'t确实是一个视图 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 让foo查看>(v:'T):查看=v 错误FS0001:此表达式应具有类型视图 但这里有T型 : 在许多面向对象语言中,向上转换是隐式的;在F#

我真的对此感到困惑。 为什么不起作用呢?我不是明确地告诉你,
't
确实是一个
视图

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
让foo查看>(v:'T):查看=v
错误FS0001:此表达式应具有类型视图
但这里有T型

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

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

最低限度的代码是

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

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

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

最低限度的代码是

let foo<'T when 'T :> View> (v:'T):View = v :> _
让foo查看>(v:'T):查看=v:>_
为什么不使用密码<代码>让foo(v:#View)=v:>View为什么不使用一个<代码>让foo(v:#视图)=v:>视图