我正在尝试重写这样的通用代码(C#):
U Upcast<T, U>(T x) where T : U { return x; }
In F#:
let ucast<'T, 'U when 'T :> 'U> (x: 'T) = x :> 'U
但 F# 约束求解的工作方式与 C# 不同,编译器会输出一堆键入错误:
错误 FS0698:无效约束:
用于约束的类型是
密封,这意味着约束
最多只能满足一个
解决方案
警告 FS0064:这种构造导致
代码不那么通用
通过类型注释。方式
变量 'T 被限制为
输入“U”。
错误 FS0663:该类型参数有
以一种限制它的方式使用
永远是“U”
错误 FS0013:静态强制
输入 'U 到 'U
涉及基于不确定类型
关于此计划之前的信息
观点。静态强制不是
某些类型允许。进一步类型
需要注释。
错误 FS0661:其中一项或多项
显式类或函数类型
此绑定的变量不能
可以概括,因为它们是
受限于其他类型
请解释一下如何正确重写上面的 C# 代码以及为什么我编写的 F# 版本无法编译。
您无法为此编写类型安全函数。但是,您可以使用upcast http://msdn.microsoft.com/en-us/library/dd233220.aspx#sectionToggle2运算符而不是您的函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)