这是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时,它会显示错误并指出我无法在类类型中声明类型。有什么帮助吗?
答案 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。内部,并且不允许它们从库中逃脱。您还可以为每个逻辑类组定义单独的模块,甚至每个复杂的类实现。