我可以在F#中的类中定义struct吗?

时间:2012-02-01 07:06:45

标签: f#

这是C#中的示例代码:

class exampleClass
{
    struct exampleStruct
    {
        public int number;
    }

    private exampleStruct[,] e;                    
    private enum exampleMove { Up, Down, Right, Left, Enter, Escape };
    Stack<int> returnPath;
    bool returntoBeg;
    int numRandomMoves;

    public exampleClass()
    {
        e = new exampleStruct[5, 5];
        exampleStruct ex;
        returntoBeg = false;
        returnPath = new Stack<int>();
        numRandomMoves = 0;

        for (int y = 0; y < 5; y++)
        {
            for (int x = 0; x < 5; x++)
            {
                ex = new exampleStruct();
                ex.number = 0

                e[x, y] = ex;
            }
        }
    }
}

我有一个像上面这样的示例代码,我想把它翻译成F#。但问题是,当我使用F#创建一个类并在其中定义struct时,它会显示错误并指出我无法在类类型中声明类型。有什么帮助吗?

2 个答案:

答案 0 :(得分:2)

我认为以下是嵌套类型的一种很好的解决方法。

namespace MyNamespace

module private PrivateTypes =
  [<Struct>]
  type ExampleStruct(number: int) =
    member __.Number = number

open PrivateTypes

type ExampleClass() =
  let e = Array2D.init 5 5 (fun y x -> ExampleStruct(0))
  //other members

ExampleStruct嵌套在PrivateTypes下,只能在同一个文件中显示。

答案 1 :(得分:1)

虽然您无法嵌套类型,但您可以使用F#提供的内部复杂类型。对于数据来说,元组通常是一个很好的数据结构,而且数据范围不是很广,可以观察到,例如在你的情况下。

实际上,我通常在名为e的模块中定义实现类型。 G。内部,并且不允许它们从库中逃脱。您还可以为每个逻辑类组定义单独的模块,甚至每个复杂的类实现。