F#的用途是什么:>操作者

时间:2016-05-19 18:44:37

标签: f#

我已经看到一些使用:>运算符的代码在C#中完成与 type-casting 类似的内容,但即使我已在网上搜索了很多内容我没见过关于它的文件。

该运算符用于什么?

它是如何运作的?

我在哪里可以找到有关它的文档?

2 个答案:

答案 0 :(得分:9)

:>是向上运营商。它曾用于在层次结构中向上投射,因此它是一种可以在编译时验证的投射。

它的对应:?>是向下转换运算符,但只能在运行时解决它的成功。

有关详情,请参阅此页:https://msdn.microsoft.com/visualfsharpdocs/conceptual/casting-and-conversions-[fsharp]

答案 1 :(得分:8)

正如@TheInnerLight所解释的那样,:>运算符表示向上转换。如果您来自C#,这需要一些时间来习惯,因为在C#中,(安全)向上转换和(不安全)向下转换都写为(SomeType)value

在F#中,您不需要经常使用:>,因为编译器会在最常见的位置插入自动向上转换 - 就像C#编译器一样。例如,假设我们foo需要obj

let foo (a:obj) = 0

F#编译器接受以下内容就好了,即使参数是Random而不是obj(正如函数foo所期望的那样):

foo (System.Random())

您可以更明确地编写它,但您不必这样做,因为编译器会插入upcast:

foo (System.Random() :> obj)

您需要显式向上转换的一种情况是从ifmatch构造的不同分支返回不同的值。例如:

if true then obj()
else System.Random()

这不会进行类型检查,但会出现错误:

  

错误FS0001:此表达式应为System.Object类型,但此处的类型为System.Random

您可以通过明确的向上修正来解决此问题:

if true then obj()
else System.Random() :> obj