将一些C#通用代码重写为F#
我正在尝试重写这样的通用代码(C#):
U Upcast(T x) where T : U { return x; }
在F#中:
let ucast 'U> (x: 'T) = x :> 'U
但是F#约束求解的工作方式与C#不同,编译器会输出一堆输入错误:
错误FS0698:无效约束:用于约束的类型是密封的,这意味着约束只能通过最多一个解决方案来满足
警告FS0064:此构造导致代码不像类型注释所指示的那样通用。 类型变量’T已被约束为类型”U’。
错误FS0663:此类型参数的使用方式将其限制为始终为“U”
错误FS0013:从“U”到“U”类型的静态强制
涉及基于此程序点之前的信息的不确定类型。 某些类型不允许静态强制。 需要进一步的类型注释。错误FS0661:此绑定的一个或多个显式类或函数类型变量无法一般化,因为它们被约束为其他类型
请解释一下如何正确地重写上面的C#代码以及为什么我写的F#版本没有编译。
这在F#中是不可能的。 请参阅如何将`where T:U`generics类型参数约束从C#转换为F#? 和https://cs.hubfs.net/forums/thread/10534.aspx 。
你不能为此编写类型安全的函数。 但是,您可以使用upcast
运算符而不是函数。
这是编译器限制。 约束’a:>’b的正确类型必须是非generics类型。
上述就是C#学习教程:将一些C#通用代码重写为F#分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1004288.html