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