Внедряване на Indexer във F#

Опитвам се да конвертирам този 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#.

Благодаря предварително,

Боб


person Beaker    schedule 04.03.2011    source източник


Отговори (1)


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]. Ако сте го нарекли нещо различно от „Елемент“, ще получите достъп до него с instance.Something[0,0].

person porges    schedule 04.03.2011
comment
Определено решихте най-трудната част от въпроса ми, така че ще го отбележа като отговор. Но, моля, не се колебайте да създадете цялата типова матрица от това, което съм дал по-горе, ако желаете. Ще се опитам да разбера тази част сам, но други може да го оценят за бъдещи справки. Благодаря за толкова бързия отговор! - person Beaker; 04.03.2011
comment
@Beaker: Не сте публикували цял тип по-горе, а само конструктор и свойство на индекс. - person ildjarn; 04.03.2011
comment
За всеки, който се интересува, зададох въпрос, който допълнително разширява този въпрос тук: stackoverflow.com/questions/5206911/ - person Beaker; 06.03.2011
comment
Страницата със свойства на индекса на MS не беше достатъчно ясна. Този отговор го изясни. Харесвам хубавия изчистен начин #F обработва индексирането. Прилагането на двумерно индексиране (на плосък масив) в C++ е сложно. - person annoying_squid; 01.08.2018