F# F:>;有什么用;操作人员

F# F:>;有什么用;操作人员,f#,F#,我见过一些代码使用:>操作符来完成类似于C#中的类型转换的操作,但即使我在网上搜索了很多,我也没有看到关于它的文档 那个接线员是干什么用的 它是如何工作的 在哪里可以找到有关它的文档?:>是向上广播操作符。它用于在层次结构中向上强制转换,因此它是一种可以在编译时验证的强制转换类型 它的对应项:?>是下行运算符,但这一操作的成功只能在运行时解决 有关更多详细信息,请参见本页:正如@TheInerlight所解释的,:>操作符表示向上投射。如果您来自C#,这需要一些时间来适应,因为在C#中,(安全)

我见过一些代码使用
:>
操作符来完成类似于
C#
中的类型转换的操作,但即使我在网上搜索了很多,我也没有看到关于它的文档

那个接线员是干什么用的

它是如何工作的


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

:>
是向上广播操作符。它用于在层次结构中向上强制转换,因此它是一种可以在编译时验证的强制转换类型

它的对应项
:?>
是下行运算符,但这一操作的成功只能在运行时解决


有关更多详细信息,请参见本页:

正如@TheInerlight所解释的,
:>
操作符表示向上投射。如果您来自C#,这需要一些时间来适应,因为在C#中,(安全)向上和(不安全)向下都写为
(SomeType)值

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

let foo (a:obj) = 0
F#编译器可以很好地接受以下内容,即使参数是
Random
而不是
obj
(正如函数
foo
所期望的那样):

您可以更明确地编写此代码,但不必这样做,因为编译器会插入上转换:

foo (System.Random() :> obj)
当从
if
match
构造的不同分支返回不同值时,需要显式向上转换。例如:

if true then obj()
else System.Random()
这不会键入check,您会得到一个错误:

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

您可以通过显式向上转换来解决此问题:

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

最好在新的“官方”F#文档中指向文章的当前版本:@TeaDrivenDev我已经更新了链接,感谢并抱歉截取了您的答案!除了其他答案外,我在查找F#运算符的功能时,还转到了运算符参考:
if true then obj()
else System.Random() :> obj