繁体   English   中英

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

[英]What is the use of the F# :> operator

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

这个运算符用于什么?

它是如何工作的?

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

:>是upcast运算符。 它用于在层次结构中向上转换,因此它是一种可以在编译时验证的转换。

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

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

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

你可以用一个明确的upcast解决这个问题:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM