19

私は今日、次のDU宣言に直面しました。

type Grammar = Definition list

and  Definition = Def of string * Expression

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

ここで、なぜ、のand代わりにキーワードを使用するのでしょうか。type

4

2 に答える 2

26

and定義GrammarDefinitionを正しくコンパイルするには、が必要です。Grammarタイプが最初にリストされますが、後で定義されるタイプによって異なりますDefinition。正しくコンパイルするにandは、F#コンパイラに型定義が依存/関連していることを通知するリンクが必要です。

そのような方法で宣言する理由はなくRange、次のように宣言する必要がありますtype

于 2011-08-22T22:42:29.780 に答える
16

相互に関連するタイプを作成するために使用されます。通常、F#では、使用する前に各型を前方宣言する必要がありますが、これが常に可能であるとは限りません。たとえば、2つ以上の型に循環依存を導入する必要がある場合などです。

あなたの例では、ではなくで定義Definitionした場合、定義された順序を切り替えない限り、の定義をコンパイルすることはできません。typeandGrammar

投稿したコード例は、相互関係が必要ないため、正確には適切ではありません。順序を変更できます。(上記に依存する、さらに下に定義されたいくつかのタイプがない限り)。

于 2011-08-22T22:44:50.260 に答える