[英]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)
需要显式向上转换的一种情况是从if
或match
构造的不同分支返回不同的值。 例如:
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.