私は今日、次のDU宣言に直面しました。
type Grammar = Definition list
and Definition = Def of string * Expression
and Range =
| Char of char
| Range of char * char
ここで、なぜ、のand
代わりにキーワードを使用するのでしょうか。type
私は今日、次のDU宣言に直面しました。
type Grammar = Definition list
and Definition = Def of string * Expression
and Range =
| Char of char
| Range of char * char
ここで、なぜ、のand
代わりにキーワードを使用するのでしょうか。type
のand
定義Grammar
とDefinition
を正しくコンパイルするには、が必要です。Grammar
タイプが最初にリストされますが、後で定義されるタイプによって異なりますDefinition
。正しくコンパイルするにand
は、F#コンパイラに型定義が依存/関連していることを通知するリンクが必要です。
そのような方法で宣言する理由はなくRange
、次のように宣言する必要がありますtype
相互に関連するタイプを作成するために使用されます。通常、F#では、使用する前に各型を前方宣言する必要がありますが、これが常に可能であるとは限りません。たとえば、2つ以上の型に循環依存を導入する必要がある場合などです。
あなたの例では、ではなくで定義Definition
した場合、定義された順序を切り替えない限り、の定義をコンパイルすることはできません。type
and
Grammar
投稿したコード例は、相互関係が必要ないため、正確には適切ではありません。順序を変更できます。(上記に依存する、さらに下に定義されたいくつかのタイプがない限り)。