Использование ключевого слова and в F # в различимых союзах - PullRequest
16 голосов
/ 23 августа 2011

Сегодня я столкнулся со следующими объявлениями DU:

type Grammar = Definition list

and  Definition = Def of string * Expression

and  Range =
     | Char  of char
     | Range of char * char

Почему здесь используется ключевое слово and вместо type, здесь?

Ответы [ 2 ]

24 голосов
/ 23 августа 2011

and необходим для правильной компиляции определений Grammar и Definition. Тип Grammar указан первым, но зависит от типа Definition, который будет определен позже. Для правильной компиляции он должен быть связан с and, который сообщает компилятору F #, что определения типов зависимы / связаны.

Нет оснований для Range быть объявленным таким образом и должен быть объявлен с type

14 голосов
/ 23 августа 2011

Используется для создания взаимосвязанных типов.Обычно в F # вам необходимо объявить каждый тип вперед, прежде чем использовать его, но это не всегда возможно, например, когда вам нужно ввести циклическую зависимость для двух или более типов.

В вашем примереесли вы определили Definition с помощью type вместо and, вы не сможете скомпилировать определение Grammar, если вы не изменили порядок, в котором они определены.

Пример кода, который вы разместили, не совсем хороший, потому что в этом нет необходимости во взаимных отношениях - вы можете изменить порядок.(Если не было еще нескольких типов, определенных ниже, которые зависели от вышеупомянутого).

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