在F#中实现Indexer

Bea*_*ker 5 f# indexer matrix

我试图将此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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

基本上我最大的问题是在F#中创建索引器.网络上的任何地方我找不到任何可以应用的东西.我包括了该类的其他几个部分,以防将索引器合并到Matrix类型中并不明显.所以一个好的答案将包括如何从这里的三个部分中制作一个完整的类型,以及可能需要的任何其他东西.另外,我知道F#powerpack中的矩阵类型,但是我试图通过将我理解的C#项目转换为F#来学习F#.

提前致谢,

短发

por*_*ges 12

F#称它们为"索引属性"; 这是MSDN页面.在F#中,它们的工作方式略有不同 - 每个索引属性都有一个名称.

但是,有一个名为"Item"的默认值.所以你的例子的实现看起来像这样:

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

然后通过访问它instance.[0,0].如果您将其命名为"Item"以外的其他内容,则可以使用它来访问它instance.Something[0,0].

  • @Beaker:你没有在上面发布一个完整的类型,只是一个构造函数和索引属性. (3认同)