2012-02-01 36 views
0

这是在C#示例代码:我可以在F#中的类中定义结构吗?

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#创建一个类并在其中定义结构时,它显示错误并指出我无法在类类型中声明类型。任何帮助?

+2

为什么你需要这样的功能?只是将C#逐行移植到F#? – pad 2012-02-01 07:14:01

+0

只是想学习如何做:) – 2012-02-01 09:01:00

+1

可能的重复:http://stackoverflow.com/questions/8948332/why-doesnt-f-support-nested-classes – kkm 2012-02-01 11:31:33

回答

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 

ExampleStructPrivateTypes,这是唯一在同一文件中可见下嵌套。

1

虽然不能嵌套类型,但可以使用F#提供的内在复杂类型。元组通常是一个很好的数据结构,它的数据结构不是很宽,可观察的范围,比如你的情况。

实际上,我通常在一个名为e的模块中定义实现类型。 G。内部的,不要让他们从图书馆逃跑。您也可以为每个逻辑组类或甚至每个复杂的类实现定义单独的模块。

相关问题