Тип свойства Item в F # - PullRequest
       13

Тип свойства Item в F #

5 голосов
/ 10 сентября 2010

Рассмотрим интерфейс:

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?

Ответы [ 2 ]

9 голосов
/ 10 сентября 2010
type IVector =  
    abstract Item : int -> float with get, set
3 голосов
/ 10 сентября 2010

Вы можете реализовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...