我有以下通用过滤器的类定义。本着函数式的原则,我想要一个更新过滤器并返回Filter类型的新对象的函数。这将允许我在不解决可变性的情况下操作更新
[<AbstractClass>]
type Filter<'T, 'a> (filterState: 'T) =
let FilterState = filterState
abstract member Update: 'a -> Filter<'T, 'a>
abstract member GetState: unit -> 'T
然后我有一个专门的实现:
type LKF (filterState: GenericMatrix, a: GenericMatrix, p: GenericMatrix, q: GenericMatrix, r: GenericMatrix, h: GenericMatrix) =
inherit Filter<GenericMatrix, GenericMatrix> (filterState)
let A = a
let P = p
let Q = q
let R = r
let H = h
override this.Update(obsVector: GenericMatrix) =
[... do calculations here]
new LKF(newx, A, P, Q, R, H)
override this.GetState() =
filterState
问题是编译器将其标记new LKF(newx, A, P, Q, R, H)
为错误,因为Filter<'T, 'a>
根据抽象类中的类型签名,它期望返回值 type ,但它却得到了一个LKF
。我认为应该没问题,因为它LKF
是 的子类型Filter<'T, 'a>
,但我错了。
我怎么解决这个问题?谢谢!