F#函数具有多态(在OO意义上)返回类型

时间:2009-11-24 20:58:55

标签: f#

是否可以让函数返回多个类型,只要它们共享一个公共基类,而不转换每个返回值?

例如:

[<AbstractClass>]
type A() = 
  abstract Do : unit -> unit

type B() =
  inherit A()
  override x.Do() = ()

type C() =
  inherit A()
  override x.Do() = ()

let getA i : A =
  if i = 0 then new B() else new C() //Error: This expression was expected to have type A but here has type B

2 个答案:

答案 0 :(得分:6)

不,你必须施展:

let getA i : A =
  if i = 0 then upcast new B() else upcast new C()

答案 1 :(得分:1)

我相信你可以使用带有约束的泛型来定义'a a:&gt;的返回类型SomeType但我现在需要启动VS来检查。

编辑:nope ..诅咒......你必须施展。