6

我正在尝试将此 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#。

提前致谢,

鲍勃

4

1 回答 1

14

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].

于 2011-03-04T03:13:27.213 回答