函数返回类型中的F#多态

时间:2015-09-19 01:07:44

标签: f# polymorphism

这是一个简单的类型层次结构。

type Parent() = class end
type Child() = inherit Parent()

我想将('x -> Child)类型的函数视为('x -> Parent)

let f (x: 'x): Child = new Child()
let g: ('x -> Parent) = f // error

但最后一次分配失败,消息为The type 'Parent' does not match the type 'Child'。有没有办法使这项工作?

1 个答案:

答案 0 :(得分:5)

您可以使用upcast operator (:>)使其正常工作:

type Parent () = class end
type Child () = inherit Parent ()

let f x = Child () // val f : x:'a -> Child
let g x = f x :> Parent // val g : x:'a -> Parent