【问题标题】:Implementing Indexer in F#在 F# 中实现索引器
【发布时间】:2011-03-04 03:01:10
【问题描述】:

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

提前致谢,

鲍勃

【问题讨论】:

    标签: f# matrix indexer


    【解决方案1】:

    F# 称它们为“索引属性”; here is the MSDN page. 在 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] 访问它。

    【讨论】:

    • 您确实解决了我问题中最难的部分,所以我将其标记为答案。但是,如果您愿意,请随时根据我上面给出的内容创建整个类型 Matrix。我将尝试自己解决该部分,但其他人可能会欣赏它以供将来参考。感谢您这么快的回答!
    • @Beaker :您还没有在上面发布整个类型,只是一个构造函数和索引属性。
    • 对于任何感兴趣的人,我在这里提出了一个进一步扩展此问题的问题:stackoverflow.com/questions/5206911/…
    • MS 的索引属性页面不够清晰。这个答案清除了它。我喜欢#F 处理索引的简洁方式。在 C++ 中实现二维索引(在平面数组上)很复杂。
    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 2011-08-14
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多