在F#中实现Indexer

时间:2011-03-04 03:01:11

标签: f# matrix indexer

我正在尝试将此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中的矩阵类型,但是我试图通过将我理解的C#项目转换为F#来学习F#。

提前致谢,

鲍勃

1 个答案:

答案 0 :(得分:12)

F#称他们为“索引属性”; here is the MSDN page.在F#中,它们的工作方式略有不同 - 每个索引属性都有一个名称。

但是,有一个名为“Item”的默认值。因此,您的示例的实现将如下所示:

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]

访问它