Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 向上投射和泛型_Generics_F# - Fatal编程技术网

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:>视图