я могу определить структуру в классе в F #? - PullRequest
0 голосов
/ 01 февраля 2012

это пример кода в 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 # и определяю в нем структуру, он показывает ошибки и указывает, что я не могу объявить тип внутри класса. Любая помощь?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Я думаю, что следующее - хороший обходной путь для вложенных типов.

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 голос
/ 01 февраля 2012

Хотя вы не можете вкладывать типы, вы можете использовать внутренние сложные типы, которые предоставляет F #. Кортежи часто являются хорошей структурой данных для данных, которые имеют не очень широкую, наблюдаемую область, как, например, в вашем случае.

На практике я обычно определяю типы реализации в модуле с именем e. г. Внутренний, и не позволяйте им сбежать из библиотеки. Вы также можете определить отдельный модуль для логической группы классов или даже для реализации сложного класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...