我的应用程序中有一个类-为简单起见,我们假设它的定义如下:
type baseType() =
member this.A = 5.
另外,我有很多函数都将这种类型的对象作为参数。而且,其中一些采用这种类型的数组:
let myFun (xArr : baseType[]) =
// ... do something inspirig ;)
现在我意识到,拥有另一个从“baseType”派生的类会很好。例如。:
type inhType() =
inherit baseType()
member this.B = 8.
但是,我不能将继承类型的数组与“myFun”之类的函数一起使用
let baseArr = [| baseType() |]
let inhArr = [| inhType() |]
myFun baseArr
myFun inhArr // won't work
这将是“很高兴”。是否有一种简单的方法可以重复使用我的功能而无需进行太多更改?
我猜解决方案之一是使用例如映射我的数组函数(fun(d:inhType)-> d:> baseType),但是我想知道是否还有其他事情可以做。
最佳答案
您需要注释您的函数为接受flexible type。
type A() = class end
type B() = inherit A()
let aArr = [| A() |]
let bArr = [| B() |]
// put # before type to indicate it's a flexible type
let f (x : #A[]) = ()
f aArr
f bArr // works!
关于inheritance - 使用带有派生类型(F#)的参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18243494/