F#:>运算符的用途是什么

Lui*_*iso 4 f#

我已经看到一些代码使用:>运算符来完成类似于类型转换的内容,C#但即使我在网上搜索了很多,我也没有看到有关它的文档.

这个运算符用于什么?

它是如何工作的?

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

The*_*ght 9

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

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

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


Tom*_*cek 8

正如@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)

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

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)