考虑界面:
type IVector =
abstract Item : int -> float
现在,让我们定义一下这个类:
type DenseVector(size : int) =
let mutable data = Array.zeroCreate size
interface IVector with
member this.Item with get n = data.[n]
如何提供一种方法来改变密集向量的第n个条目?然后,将上述代码修改为:
会很高兴type DenseVector(size : int) =
let mutable data = Array.zeroCreate size
interface IVector with
member this.Item with get n = data.[n]
and set n value = data.[n] <- value
但是,由于Item
界面中抽象方法IVector
的签名,我收到以下错误:
未找到与此覆盖相对应的抽象属性。
那么Item
中IVector
的签名应该是什么?
答案 0 :(得分:9)
type IVector =
abstract Item : int -> float with get, set
答案 1 :(得分:3)
您可以在不更改原始界面的情况下实现DenseVector,同时还提供如下设置器:
type IVector =
abstract Item: int -> float with get
type DenseVector(size : int) =
let data = Array.zeroCreate size
interface IVector with
member this.Item with get i = data.[i]
member this.Item
with get i = (this :> IVector).[i]
and set i value = data.[i] <- value