我已经看到一些代码使用:>运算符来完成类似于类型转换的内容,C#但即使我在网上搜索了很多,我也没有看到有关它的文档.
这个运算符用于什么?
它是如何工作的?
我在哪里可以找到有关它的文档?
:>是投资运营商.它用于在层次结构中向上转换,因此它是一种可以在编译时验证的转换.
它的对应物:?>是向下运算符,但它的成功只能在运行时解决.
有关详细信息,请参阅此页面:https://msdn.microsoft.com/visualfsharpdocs/conceptual/casting-and-conversions-[fsharp]
正如@TheInnerLight解释的那样,:>运营商代表了一个向上的人.如果您来自C#,这需要一些时间来习惯,因为在C#中,(安全)向上转换和(不安全)向下转换都被写为(SomeType)value.
在F#中,您不需要:>经常使用,因为编译器将在最常见的位置插入自动upcast - 就像C#编译器一样.例如,假设我们foo需要obj:
let foo (a:obj) = 0
Run Code Online (Sandbox Code Playgroud)
F#编译器接受以下内容就好了,即使参数Random不是obj(如函数所foo期望的那样):
foo (System.Random())
Run Code Online (Sandbox Code Playgroud)
您可以更明确地编写它,但您不必这样,因为编译器会插入upcast:
foo (System.Random() :> obj)
Run Code Online (Sandbox Code Playgroud)
需要显式向上转换的一种情况是从不同的分支if或match构造中返回不同的值.例如:
if true then obj()
else System.Random()
Run Code Online (Sandbox Code Playgroud)
这不会检查并且您收到错误:
错误FS0001:此表达式应具有类型,
System.Object但此处具有类型System.Random
你可以用一个明确的upcast解决这个问题:
if true then obj()
else System.Random() :> obj
Run Code Online (Sandbox Code Playgroud)