Реализация индексатора в F # - PullRequest
5 голосов
/ 04 марта 2011

Я пытаюсь преобразовать этот код C # в F #:

double[,] matrix;

public Matrix(int rows, int cols)
    {
        this.matrix = new double[rows, cols];
    }

 public double this[int row, int col]
    {
        get
        {
            return this.matrix[row, col];
        }
        set
        {
            this.matrix[row, col] = value;
        }
    }

В основном моя самая большая проблема - создание индексатора в F #.Я не мог найти ничего, что я мог бы применить в этой ситуации в Интернете.Я включил несколько других частей класса на случай, если включение индексатора в тип Matrix не очевидно.Таким образом, хороший ответ будет включать в себя, как сделать полный шрифт из трех частей, а также все остальное, что может понадобиться.Кроме того, мне известен тип матрицы в F # powerpack, однако я пытаюсь выучить F # путем преобразования понятных мне C # проектов в F #.

Заранее спасибо,

Боб

1 Ответ

12 голосов
/ 04 марта 2011

F # называет их «индексированными свойствами»; вот страница MSDN. В F # они работают немного по-разному - у каждого индексированного свойства есть имя.

Тем не менее, по умолчанию существует пункт под названием «Элемент».Таким образом, реализация вашего примера будет выглядеть следующим образом:

member this.Item
  with get(x,y) = matrix.[(x,y)]
  and  set(x,y) value = matrix.[(x,y)] <- value

Тогда к этому можно получить доступ через instance.[0,0].Если бы вы назвали что-то, отличное от «Item», вы бы получили к нему доступ с помощью instance.Something[0,0].

...